【问题标题】:Is it possible to bind a XAML control to a corresponding control in the ViewModel?是否可以将 XAML 控件绑定到 ViewModel 中的相应控件?
【发布时间】: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


【解决方案1】:

将 ViewModel 中的控件公开为 ContentControl 属性并在 XAML 中绑定它们。

【讨论】:

    猜你喜欢
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 2012-09-01
    • 2021-11-22
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2017-12-14
    相关资源
    最近更新 更多