我创建了一个 WPF 窗口并将其设为 MEF 导出。
我可以在 MEF 导入上执行一次 ShowDialog,但第二次它中止,因为 MEF 组件已被第一个 ShowDialog 关闭。
可以做些什么来允许 ShowDialog 的重复?
我创建了一个 WPF 窗口并将其设为 MEF 导出。
我可以在 MEF 导入上执行一次 ShowDialog,但第二次它中止,因为 MEF 组件已被第一个 ShowDialog 关闭。
可以做些什么来允许 ShowDialog 的重复?
当您像这样在 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();
}
}
}
有关如何在 WPF 应用程序中使用 MEF 的更多示例,可以在WPF 应用程序框架 (WAF)项目下载中找到(查看示例应用程序)。