C# MVVM视图模型视图通信

C# MVVM视图模型视图通信,c#,mvvm,windows-runtime,winrt-xaml,C#,Mvvm,Windows Runtime,Winrt Xaml,我有一个列表视图和一个弹出窗口,其中的内容(按钮,文本框等)根据在列表视图中选择的内容而动态变化。如果视图确定了弹出窗口中的内容,或者视图模型应该这样做,这是否合法?我还想问一下,视图是否可以处理视图模型的事件?查看视图中有效内容的详细说明。这比我在这里的答案解释得更好 不过,我将尝试回答您的问题: 问:如果视图决定弹出窗口中的内容,或者ViewModel应该这样做,这合法吗? 答:视图应确定弹出窗口的显示方式,ViewModel应确定显示的内容 Q:视图能否处理ViewModel的事件? 答:

我有一个
列表视图
和一个
弹出窗口
,其中的内容(
按钮
文本框
等)根据在
列表视图
中选择的内容而动态变化。如果
视图
确定了
弹出窗口
中的内容,或者
视图模型
应该这样做,这是否合法?我还想问一下,
视图
是否可以处理
视图模型
的事件?

查看视图中有效内容的详细说明。这比我在这里的答案解释得更好

不过,我将尝试回答您的问题:

问:如果视图决定弹出窗口中的内容,或者ViewModel应该这样做,这合法吗? 答:视图应确定弹出窗口的显示方式,ViewModel应确定显示的内容

Q:视图能否处理ViewModel的事件?
答:当然,这是数据绑定的一个关键部分—处理INotifyPropertyChanged事件。

MVVM不是一项法律—它是一种工具。如果你所做的事符合你的目的,那它对你来说就是有用的。如果你问什么是最佳实践,这取决于你为什么首先使用MVVM

  • 是因为您想独立于视图编写测试吗?然后将逻辑状态放入视图模型中

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

  • 这是因为您希望拥有可维护的代码,这些代码将由熟悉MVVM的人长期维护吗?将逻辑放在视图模型中

  • 是不是因为你的应用程序很复杂,你希望将关注点分离,这样不同的人会处理视图,不同的人会处理视图模型。将逻辑放在视图模型中

如果这些都不适用,您可能会很好,只需将代码放在代码后面,而不让MVVM成为拖累,就可以花更少的时间尝试解决问题

如果您的问题是如何使用视图模型驱动
弹出窗口的内容,您通常可以使用
项控件的组合来实现,例如
列表视图
GridView
或自定义视图和
ContentControls
以及
ItemTemplateSelectors
ContentTemplateSelectors
,它们实现了基于视图模型状态确定要显示哪个视图的逻辑


也可以查看我的宣言帖子。

“如果你所做的符合你的目的,那么它对你是有效的。”我100%同意。此外,我还要补充一点,选择一个好的框架来指导您,这才是真正帮助我从模式中获得最大收益的地方。