4

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

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

可以做些什么来允许 ShowDialog 的重复?

4

2 回答 2

3

当您像这样在 WPF 窗口上调用 ShowDialog 两次时:

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

您将收到一条InvalidOperationException带有此消息的消息:

窗口关闭后无法设置可见性或调用 Show 或 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();
      }
   }
}
于 2010-05-31T13:54:55.710 回答
0

有关如何在 WPF 应用程序中使用 MEF 的更多示例,可以在WPF 应用程序框架 (WAF)项目下载中找到(查看示例应用程序)。

于 2010-07-30T18:59:08.997 回答