昨天我使用谷歌搜索了一些关于如何在WPF中使用PRISM 4.1和MVVM模式创建可重用的漂亮对话框的方法。我找到了一些示例,但必须说没有一个像我想要的那样"漂亮"。
这个:WPF Modal Dialog (没有MVVM-> 不用)
这个很不错:Showing Dialogs when using the MVVM Pattern(但它仍然使用自制的ServiceLocator,而我不需要,因为我正在使用IUnity容器。我可以使用逻辑并将其重写到Unity,但在我诚实的意见中,这不是“漂亮”的方式。
好吧,在网上搜索了一段时间后,某个博客(现在找不到来源了)告诉我PRISM Framework有一个叫做“interaction requests”的东西。所以我查看了prism文档,并在“高级mvvm场景”主题下找到了一小部分内容,但文档中提供的信息不足。
这个:WPF Modal Dialog (没有MVVM-> 不用)
这个很不错:Showing Dialogs when using the MVVM Pattern(但它仍然使用自制的ServiceLocator,而我不需要,因为我正在使用IUnity容器。我可以使用逻辑并将其重写到Unity,但在我诚实的意见中,这不是“漂亮”的方式。
好吧,在网上搜索了一段时间后,某个博客(现在找不到来源了)告诉我PRISM Framework有一个叫做“interaction requests”的东西。所以我查看了prism文档,并在“高级mvvm场景”主题下找到了一小部分内容,但文档中提供的信息不足。
我想知道是否有任何关于如何在prism wpf中使用mvvm实现一个很棒的模态对话框的好例子或博客文章。
编辑: 关于评论中的问题:
什么使一个模态对话框很棒?
确实是一个好问题。
- 它必须是模态的(当对话框打开时,其余UI应该被冻结)
- 对话框视图可以有自己的视图模型,或者至少我想给对话框视图提供一个对象实例,并返回一个对象到父视图
- 视图应该是自己的“xaml”文件
- 来自.NET的dialogresult功能,或者至少一种获取用户在对话框中单击了什么响应的方法
Window.ShowDialog()
不会冻结用户界面。相反,它通过禁用父窗口来阻止用户输入,然后启动一个嵌套的模态消息循环(新的Dispatcher
帧)。所有这些都在同一个UI线程上发生。因此,它的行为与WinFormsForm.ShowDialog()
类似。 - noseratio - open to workThread.Sleep(10000)
会冻结整个UI。调用Window.ShowDialog()
会禁止用户输入进入父窗口,但不会冻结它。您甚至可以从模态对话框更新父窗口的UI。打开Visual Studio并在菜单中选择“帮助”->“关于”,这是您要寻找的那种对话框吗? - noseratio - open to work