多个源绑定到相同的目标依赖项属性

时间:2017-05-03 20:43:12

标签: c# wpf xaml

是否可以将多个(双向)源绑定附加到依赖项属性?也就是说,如果一个源发生变化,DP就会通过一个绑定进行更新,然后通过第二个绑定将更改传播到第二个源。

在我的场景中,依赖项属性位于用户控件中,第一个绑定是其内部视图模型,第二个绑定是用户控件的使用者的视图模型。

以下是插图。用户控件的使用者如下所示:

<MyControl SelectedValue="{Binding Selected,Mode=TwoWay}" />

现在“MyControl”将“SelectedValue”定义为依赖属性。控件的XAML绑定到它的依赖属性,如下所示:

<UserControl>
    <Grid x:Name="LayoutRoot">
        <TextBox Text="{Binding SelectedValue,Mode=TwoWay,
               RelativeSource={RelativeSource AncestorType=UserControl}}" 
          />
    </Grid>
</UserControl>

“MyControl”在控件的构造函数中将其内部数据上下文集设置为自己的视图模型:

LayoutRoot.DataContext = new ViewModelForControl();

到目前为止一切顺利,但如果我再尝试添加第二个绑定,那就是内部视图模型上“SelectedInternal”属性的依赖属性 -

SetBinding(SelectedValueProperty, new Binding("SelectedInternal") {
    Source = LayoutRoot.DataContext,
    Mode = BindingMode.TwoWay
});

- 然后第一个绑定被破坏。有没有办法在保留第一个绑定的同时添加第二个绑定?

1 个答案:

答案 0 :(得分:1)

这是否被推翻了?

为什么不简单地在自定义控件的代码中执行管道并放弃绑定?

这可以通过

完成
  1. SelectedValue依赖项属性将利用其更改的处理程序,并在任何更改集SelectedInternal上使用新值。
  2. SelectedInternal更改写入属性SelectedValue
  3. 您可以在控件上创建VM,这样您就可以访问VM及其属性,这可以为双向传输提供数据的矢量化。

    在一天结束时,绑定只是通过反射获得参考。在这种情况下,如何获得引用对于简单地在两个属性之间来回写入是无关紧要的。

    或者我错过了什么?