使用Prism和MVVM Pattern在WPF中进行模态对话的"漂亮"方法

dar*_*dog 17 c# wpf xaml prism mvvm

昨天我用谷歌找到了一些方法,用PRISM 4.1和MVVM模式在WPF中制作了一个非常棒的可重用模态对话框.我发现了一些例子,但我必须说那些不像我喜欢它们那样"漂亮".

这一个:WPF模态对话框(没有mvvm - >没用)

这非常好:在使用MVVM模式时显示Dialogs(但它仍然使用我不需要的自制ServiceLocator,因为我正在使用IUnity Container.我可以使用逻辑并将其重写为Unity但这不是"漂亮的" "在我诚实的意见中.

好吧,经过一段时间在网上搜索信息,一些博客(现在找不到源代码)告诉我,PRISM框架有一个叫做"交互请求"的东西.所以我查看了prism文档并在"高级mvvm场景"主题下找到了一小部分,但文档中给出的信息还不够.

我想知道是否有人有任何好的例子或任何好的博客文章,关于如何用mvvm在prism wpf中实现一个很棒的模态对话框.

编辑:关于评论中的问题:

是什么让模态对话变得棒极了?

确实是个好问题.

  1. 它必须是模态的(当对话框打开时,UI的其余部分应该被冻结)
  2. 对话框视图可以拥有自己的viewmodel,或者至少我想将对象的实例提供给对话框视图并将对象返回给父视图
  3. 视图应该是一个自己的"xaml"文件
  4. .NET中的dialogresult功能,或者至少是一种获取用户在对话框中单击的响应的方法

Jaw*_*har 20

PRISM 5.0提出了快速解决方案来显示模态对话框.使用PopupWindowAction.

<prism:InteractionRequestTrigger SourceObject="{Binding CustomPopupViewRequest, Mode=OneWay}">
    <prism:PopupWindowAction>
        <prism:PopupWindowAction.WindowContent>
            <views:CustomPopupView />
        </prism:PopupWindowAction.WindowContent>
    </prism:PopupWindowAction>
</prism:InteractionRequestTrigger>
Run Code Online (Sandbox Code Playgroud)


Mar*_*ark 5

交互请求需要更多的前期工作,但它们绝对是从MVVM纯粹主义角度出发的正确方法......

我在Karl Shifflett的MVVM In The Box训练扩展中看到了如何使用Prism做到这一点的一个例子.

我记得,这个例子在边缘非常粗糙,但它应该让你朝着正确的方向前进.

这种视图"对话框"的问题是它不允许对话框超出父窗口的范围.从好的方面来说,你可以做很多花哨的布局和动画.