我应该如何从我的ViewModels中生成对话框?

时间:2011-11-08 15:42:28

标签: .net wpf xaml mvvm

对于MVVM中的对话框窗口(WPF),是否有任何关于最佳实践的共识?我已经通过两种方式看到了它:

  1. 发送“RequestsDialog”消息并等待“DialogProcessed”消息的中介者(EventAggregator,EventBus或任何您喜欢称之为的内容)。

  2. 在视图xaml中声明的对话框,它绑定到调用者的视图模型,并通过Command或EventTrigger或类似的东西显示。

  3. 我正在试图找出哪种方式更好,我需要一些帮助。

    我对#1的关注是(并且一直都是),控制请求范围和回复消息的最佳方法是什么?我的意思是,让我说我的“本地”消息和“全局”应用程序消息由我的中介处理....我如何确保我的ViewModel仍然可以接收全局消息...但同时另一个ViewModel在当前窗口中不会意外地收到用于活动ViewModel的DialogProcessed消息。

    采取以下方案:

    • 1 Window
    • 2个UserControls,每个绑定到独立的ViewModels
    • ViewModel1发送RequestConfirmation消息并等待ConfirmationResponse消息
    • 我还在ViewModel1中接收全局消息(如RequestCloseWindow消息)。

    如何阻止ViewModel2获取ViewModel1发起的RequestConfirmation消息的ConfirmationResponse消息?

2 个答案:

答案 0 :(得分:1)

您可以传递参数以及标识其用途的消息,也可以让Message包含一些方法的委托,以便在完成后执行。

通常我更喜欢使用标识符,因为它更简单。有时它是Id或GUID,但通常它只是this。这种方式在处理Processed消息的方法中我可以说

if (evt.Source != this) return;

答案 1 :(得分:1)

您是否尝试过使用类似于Prism的InteractionRequests的东西?

它们完全涵盖了您所描述的场景。请查看this文章。