【发布时间】:2014-04-18 18:37:58
【问题描述】:
我正在构建我的第一个 WPF 和 MVVM 应用程序。我有 3 个视图(带有 3 个对应的 ViewModel)
1) 主窗口(窗口)
2) ViewClients (UserControl)
3) ViewModClient(用户控件)
在客户端 ViewModel 中,我有一个属性 SelectedClient,用于跟踪视图中 DataGrid 上选定的客户端。在这个视图中,我还有一个与 MainWindow ViewModel 中定义的 ICommand 相关的按钮。 我用这个绑定解决了它:
Command="{Binding Path=DataContext.CreateViewsCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" CommandParameter={x:Type local:ViewModClient}
我使用 CommandParameter 告诉 mainWindow ViewModel 要创建哪种视图,并使视图模型与视图知识隔离。这很好用。
现在的问题:
在 ModClient ViewModel 中,我需要加载客户端的数据。那么如何在保持 MVVM 模式的同时将其与客户端视图中的 SelectedClient 相关联? (我只能使用一个CommandParameter并且已经使用了)
【问题讨论】:
-
也许使用某种形式的 EventAggregator?您可以从 ViewClients VM 中引发事件并在 ViewModClient VM 中订阅它。
-
感谢您的回答。你能给我一些示例代码吗?也许您可以将其发布为建议答案。
-
查看 MVVM Light Toolkit,它具有内置消息支持mvvmlight.codeplex.com
-
也可以考虑卡特。它是一个功能齐全的 MVVM 框架,并带有在线模板和一个很好的入门指南 (catelproject.atlassian.net/wiki/display/CTL/…)。这意味着您可以尝试并体验它。它包含几种视图模型之间通信的方法:1)基于属性的通信 2)消息中介