MEF 组件上的 ShowDialog 只能运行一次

发布于 2024-09-04 07:24:36 字数 138 浏览 4 评论 0原文

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

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

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

I created a WPF Window and made it a MEF Export.

I can do a ShowDialog once on the MEF Import but the second time it aborts because the MEF component was closed by the first ShowDialog.

What can be done to allow repeats of ShowDialog?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

时光无声 2024-09-11 07:24:36

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

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

您将收到带有以下消息的 InvalidOperationException

无法设置可见性或调用显示或
窗口关闭后显示对话框。

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

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();
      }
   }
}

When you call ShowDialog on a WPF window twice like this:

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

you will get an InvalidOperationException with this message:

Cannot set Visibility or call Show or
ShowDialog after window has closed.

To fix this, you need to recreate the window each time, e.g. like this:

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

To do this in MEF, you could export a separate controller component which is responsible for creating and then showing your dialog (rather than exporting your dialog directly):

[Export]
public class MyDialogController
{
   public void ShowMyDialog()
   {
      using (var myDialog = new MyDialog())
      {
          myDialog.ShowDialog();
      }
   }
}
你是年少的欢喜 2024-09-11 07:24:36

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

Further examples on how to use MEF within a WPF application can be found in the WPF Application Framework (WAF) project download (have a look at the sample applications).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文