MEF组件上的ShowDialog只能工作一次

时间:2010-05-31 11:18:11

标签: wpf mef showdialog

我创建了一个WPF窗口并使其成为MEF导出。

我可以在MEF导入上执行一次ShowDialog,但第二次中止,因为MEF组件被第一个ShowDialog关闭。

可以做些什么来重复ShowDialog?

2 个答案:

答案 0 :(得分:3)

当您在WPF窗口上两次调用ShowDialog时,如下所示:

var window = new Window();
window.ShowDialog(); // returns when user closes first window
window.ShowDialog(); // throws 

您将收到InvalidOperationException此消息:

  

无法设置可见性或调用显示或   窗口关闭后的ShowDialog。

要解决此问题,您需要每次都重新创建窗口,例如像这样:

var window = new Window();
window.ShowDialog();
window = new Window();
window.ShowDialog();

要在MEF中执行此操作,您可以导出一个单独的控制器组件,该组件负责创建然后显示对话框(而不是直接导出对话框):

[Export]
public class MyDialogController
{
   public void ShowMyDialog()
   {
      using (var myDialog = new MyDialog())
      {
          myDialog.ShowDialog();
      }
   }
}

答案 1 :(得分:0)

有关如何在WPF应用程序中使用MEF的更多示例,请参阅 WPF Application Framework (WAF) 项目下载(查看示例应用程序)。