我有一个控制台应用程序,它在某个时候创建一个 WPF 窗口,将 VM 添加到 Datacontext,并将窗口显示为对话框。控制台通过 DialogResult 进一步运行。
我对 Avalonia 进行了同样的尝试,但没有成功。所有示例均适用于 App.axaml 和 AppBuilder(如果我想要仅 GUI 应用程序,则可以)
当我在 WPF 中创建窗口时,出现无法定位 IWindowPlatform 的异常。
我可以在阿瓦隆尼亚这样做吗?
int main()
{
var x = foo();
// some Initiative code
var view = MyView();
var viewModel = MyViewModel(x);
view.DataContext = viewModel;
var result = view.ShowDialog();
if(result==DialogResult.Ok)
{
var y = viewModel.Bar;
}
}
这个助手完成了这项工作,但看起来并不像预期的那样:
using System;
using Avalonia;
using Avalonia.Controls;
using Avalonia.ReactiveUI;
namespace Foo
{
public class DialogService
{
private readonly Func<Window> windowFactory;
public DialogService(Func<Window> windowFactory)
{
this.windowFactory = windowFactory;
}
public static AppBuilder BuildAvaloniaApp()
=> AppBuilder.Configure<App>()
.UsePlatformDetect()
.LogToTrace()
.UseReactiveUI();
internal void ShowDialog()
{
BuildAvaloniaApp()
.Start(AppMain, Array.Empty<string>());
}
private void AppMain(Application app, string[] args)
{
var window = windowFactory();
window.Show();
app.Run(window);
}
}
}