我创建了一个WPF窗口并使其成为MEF导出。
我可以在MEF导入上执行一次ShowDialog,但第二次中止,因为MEF组件被第一个ShowDialog关闭。
可以做些什么来重复ShowDialog?
答案 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) 项目下载(查看示例应用程序)。