【发布时间】:2015-03-17 22:11:56
【问题描述】:
我使用 WPF 是为了遵守 MVVM 模型。我的 XAML 视图中有多个控件,例如按钮、组合框等,并且我的 ViewModel 中有一组相应的控件。有没有办法将 XAML 中的控件(例如按钮)绑定到 ViewModel 中的匹配控件,以便它们具有一对一的关系?
我知道它通常是如何完成的,特定的 XAML 控件属性绑定到 ViewModel 中的特定属性。我认为通过将整个控件绑定到匹配控件,可以简化绑定过程。我不需要绑定单个属性,我可以绑定整个控件,然后以编程方式修改 ViewModel 中我想要的任何属性。
例如,我的 XAML 按钮控件看起来像这样(DataBinding 属性不是实际属性):
<Button DataBinding="SignInButton" />
并且按钮的所有属性都不会在 XAML 中设置,而是在我的 ViewModel 中设置:
public Button SignInButton;
SignInButton.Content = "Sign In";
SignInButton.Width = 100;
SignInButton.FontFamily = "Verdana";
【问题讨论】:
-
我想我实际上在 ViewModel 中有一个“Button”对象的行为是导致它不遵守 MVVM 的原因,对吧?那应该单独保存在视图中吗?
-
而不是让你的
Control显然是Views 元素在你的ViewModel与视图无关,即ViewModel 永远不应该知道View。有一个定义了按钮特定元素的内部类,然后将它们绑定到按钮。如果您不想将属性绑定到ViewModel,请考虑使用 Blend,然后定义要绑定的属性,否则您不能只绑定Control而不指定属性。至少我不知道这种方式,没有破坏MvvM。 HTH -
有道理。在我的 ViewModel 中拥有控件本身将打破 MVVM 模式。必要时我会坚持只绑定单个属性。
标签: wpf xaml mvvm wpf-controls