MVVM ViewModel-View通信

时间:2014-03-25 15:01:41

标签: c# mvvm windows-runtime winrt-xaml

我有ListViewPopup内容(ButtonsTextBoxes等)根据ListView中选择的内容动态变化。如果View确定PopupViewModel应该做什么,这是否合法?我还想问一下,View是否可以处理ViewModel的事件?

2 个答案:

答案 0 :(得分:1)

查看5: Implementing the MVVM Pattern以获取有关视图中有效内容的详细说明。它在这个答案中解释得比我在这里好多了。

我会尽快解答你的问题:

问:如果View确定弹出窗口中的内容或ViewModel应该执行什么操作,这是否合法? 答:视图应确定弹出窗口的显示方式,ViewModel应确定显示的内容。

问:View可以处理ViewModel的事件吗? 答:当然,这是DataBinding的一个关键部分 - 处理INotifyPropertyChanged事件。

答案 1 :(得分:1)

MVVM不是法律 - 它是一种工具。如果您正在做的事情符合您的目的 - 它适合您。如果你问最佳实践是什么 - 这取决于你最初使用MVVM的原因。

  • 是不是因为你想编写独立于视图的测试?然后将您的逻辑状态放在视图模型中。

  • 是否因为您希望能够在Blend中显示设计时数据?然后将您的逻辑状态放在视图模型中,并定义设计时间数据以在设计模式下显示。

  • 是否因为您希望熟悉MVVM的人能够维护可维护的代码很长一段时间?将您的逻辑放在视图模型中。

  • 是否因为您的应用程序很复杂而且您希望将关注点分开,以便不同的人可以在视图上工作,而不同的人会在视图模型上工作。将您的逻辑放在视图模型中。

如果这些都不适用 - 你可能会很好,花更少的时间试图通过将代码放在代码中来解决它,而不是让MVVM成为一个拖累。

如果您的问题是如何使用您的视图模型推送Popup的内容 - 通常可以使用ItemsControls的组合来实现这一点,例如ListView,{{1}或者可能是自定义的GridViewContentControlsItemTemplateSelectors,它们实现了根据视图模型状态确定要显示的视图的逻辑。

另请查看我的Minimalistic MVVM宣言帖。