【问题标题】:Binding a control when the View is bound to a ViewModel?View绑定到ViewModel时绑定控件?
【发布时间】:2017-09-29 21:53:30
【问题描述】:

这是我的情况。我有一个视图和一个视图模型。视图的 DataContext 设置为 ViewModel。由于使用了第 3 方控件,我不得不在代码隐藏中放置一些代码。在代码隐藏中,我创建了一个名为 StraightConnectorTool 的对象。

在我看来,我需要绑定到这个对象。如果在后台代码中设置了 View 的 DataContext:

DataContext = this;

以下绑定工作正常。

<BarItemToolBehavior ActiveTool="{Binding ActiveTool, ElementName=diagram, Mode=TwoWay}" 
                                 Tool="{Binding StraightConnectorTool}"/>

其中 diagram 是 View 上第 3 方控件的名称,ActiveTool 是它的属性之一。

但是,如果 View 的 DataContext 设置为 ViewModel,则绑定不起作用。当 DataContext 设置为 ViewModel 时,我一直试图弄清楚如何绑定到视图。有什么想法吗?

【问题讨论】:

  • this.DataContext = this; 是 WPF MVVM 的毒瘤。 This article explains why 你会注意到它有点长,但化疗也是如此。

标签: wpf mvvm data-binding


【解决方案1】:

这不是一个好习惯,但您可以将 BarItemToolBehavior 的 DataContext 绑定到视图。在代码中按名称或在 XAML 中使用 RelativeSource FindAncestor 来查找视图。更好的解决方案是将该对象移动到它所属的 VM。

【讨论】:

  • 使用 RelativeSource FindAncestor 有效。谢谢你的提示。顺便说一句,我同意你将对象移动到 VM,但这是另一个问题......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
  • 2013-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
相关资源
最近更新 更多