【发布时间】:2014-12-03 03:49:05
【问题描述】:
我有一个MainWindow,它由几个UserControls 组成。
目前,我有一位上帝ViewModel.cs,它定义在MainWindow 级别,负责所有用户控件的工作。
现在我觉得这不是正确的做法。也许我应该为每个用户控件设置单独的视图模型,对吧?但我的问题是如何在这些之间进行交互?假设 usercontrol1 中发生了一些事件,它改变了 usercontrol2 的视图模型中的某些内容?
【问题讨论】:
-
文本框有虚拟机吗? ListView 有虚拟机吗?网格有虚拟机吗? 那么为什么 UserControl 应该有一个 VM? 这是一种代码味道。当你尝试这样做时,你会遇到失败。只需在您的 UserControl 上创建公共属性,将它们绑定到您的虚拟机,然后在您的 UCs xaml 中绑定到这些属性。或者在代码隐藏中执行您需要执行的任何 UI 逻辑。
-
@Will 谢谢Will,你的意思是我应该以双向模式将公共属性绑定到VM?
-
用户控件表面上的公共 DependencyProperties。从内部绑定到他们,从外部绑定到他们。尽可能地绑定它们。前进!并绑定!
-
@Will 你能用一个非常简单的例子告诉我吗?顺便说一句,我喜欢你的幽默感;)
-
这个答案有一个例子 stackoverflow.com/q/22912039/managing-and-binding-usercontrols/… 代码气味的更长解释 stackoverflow.com/questions/25795871/… 和另一个 stackoverflow.com/questions/21093396/… 希望有所帮助。