从Office启动WPF窗口添加

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窗口?

Cod*_*095 0

虽然 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 等。