Cod*_*095 8 c# wpf ms-office mvvm office-addins
我创建了一个办公室加载项,它包含一个WPF应用程序的实例.当用户单击加载项上的按钮时,我通过执行以下操作启动不同的窗口:
MyViewModel viewModel = new MyViewModel(string infoFromOffice);
MyWindow view = new MyWindow();
view.DataContext = viewModel;
wpfApp.Run(view);
Run Code Online (Sandbox Code Playgroud)
在我调用之前构建视图模型我wpfApp.Run()稍后使用当前的SynchronizationContext命中probelms.这里的答案解释了原因.有没有更好的方法从办公室加载项启动WPF窗口?
虽然 Arthur 的答案有助于指出问题发生的原因,但它实际上并没有回答如何将数据从主机应用程序传递到视图模型,同时在调用App.Run(). 我已经找到了一个(非常简单)的解决方案!对于任何有兴趣的人。
在 App.xaml.cs 中:
private string data;
public App(string infoFromOffice) {
this.data = data;
}
protected override void OnStartup(StartupEventArgs e) {
base.OnStartup(e);
MyViewModel viewwModel = new MyViewModel(this.data);
MyWindow view = new MyWindow();
view.Show();
}
Run Code Online (Sandbox Code Playgroud)
启动应用程序时:
App application = new App(infoFromOffice);
application.Run();
Run Code Online (Sandbox Code Playgroud)
请注意,需要在 App.xaml 中删除启动 URI。这个非常简单的解决方案允许我将信息传递到我的应用程序,但同时不需要在“非 WPF 环境”中构建视图模型,因此可以使用 Dispatcher 等。