对于MVVM中的对话框窗口(WPF),是否有任何关于最佳实践的共识?我已经通过两种方式看到了它:
发送“RequestsDialog”消息并等待“DialogProcessed”消息的中介者(EventAggregator,EventBus或任何您喜欢称之为的内容)。
在视图xaml中声明的对话框,它绑定到调用者的视图模型,并通过Command或EventTrigger或类似的东西显示。
我正在试图找出哪种方式更好,我需要一些帮助。
我对#1的关注是(并且一直都是),控制请求范围和回复消息的最佳方法是什么?我的意思是,让我说我的“本地”消息和“全局”应用程序消息由我的中介处理....我如何确保我的ViewModel仍然可以接收全局消息...但同时另一个ViewModel在当前窗口中不会意外地收到用于活动ViewModel的DialogProcessed消息。
采取以下方案:
如何阻止ViewModel2获取ViewModel1发起的RequestConfirmation消息的ConfirmationResponse消息?
答案 0 :(得分:1)
您可以传递参数以及标识其用途的消息,也可以让Message包含一些方法的委托,以便在完成后执行。
通常我更喜欢使用标识符,因为它更简单。有时它是Id或GUID,但通常它只是this
。这种方式在处理Processed
消息的方法中我可以说
if (evt.Source != this) return;
答案 1 :(得分:1)
您是否尝试过使用类似于Prism的InteractionRequests的东西?
它们完全涵盖了您所描述的场景。请查看this文章。