【发布时间】:2014-02-13 15:15:11
【问题描述】:
昨天我使用 google 找到了一些方法来使用 PRISM 4.1 和 MVVM 模式在 WPF 中制作一个很棒的可重用模式对话框。我找到了一些例子,但我必须说这些都不像我喜欢的那样“漂亮”。
这个:WPF Modal Dialog(没有 mvvm -> 没用)
这非常好:Showing Dialogs when using the MVVM Pattern(但它仍然使用自制的 ServiceLocator,因为我使用的是 IUnity Container,所以我不需要它。我可以使用逻辑并将其重写为 Unity,但这不是“漂亮”以我的诚实观点。
在网上搜索信息一段时间后,一些博客(现在找不到源代码)告诉我,PRISM 框架有一个叫做“交互请求”的东西。因此,我查看了 prism 文档,并在“高级 mvvm 场景”主题下找到了一小部分,但文档中提供的信息还不够。
我想知道是否有人有任何关于如何使用 mvvm 在 prism wpf 中实现很棒的模态对话框的好例子或任何好的博文。
编辑: 关于cmets中的问题:
是什么让模态对话框很棒?
确实是个好问题。
- 它必须是模态的(对话框打开时 UI 的其余部分 应该被冻结)
- 对话框视图可以有自己的视图模型或 至少我想给对话框一个对象的实例 查看并将对象返回到父视图
- 视图应该是一个自己的“xaml”文件
- .NET 或 at 的 dialogresult 功能 至少有一种方法可以响应用户在对话框中单击的内容
【问题讨论】:
-
嗯...是什么让模态对话框很棒? Ô.o 如果您能提供比这更多的技术要求,比如 awesome 请求,那就太好了。 ;)
-
我编辑了我的问题并回答了您的问题
-
您在编辑中发布的功能列表是否已经存在于基本 WPF 中(不涉及 PRISM)?
-
Window.ShowDialog()不会冻结 UI。相反,它通过禁用它来阻止用户输入进入父窗口,然后启动嵌套的模式消息循环(新的Dispatcher框架)。所有这些都发生在同一个 UI 线程上。因此,它的行为与 WinFormsForm.ShowDialog()非常相似。 -
@darkdog,冻结 UI 和禁用它是两件不同的事情。调用
Thread.Sleep(10000)会冻结整个 UI。调用Window.ShowDialog()将禁止用户输入进入父窗口,但不会冻结它。您甚至可以从模式对话框更新父窗口的 UI。打开 Visual Studio 并从菜单中执行 Help About,是您要查找的对话框类型吗?