是否可以将多个(双向)源绑定附加到依赖项属性?也就是说,如果一个源发生更改,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
});
- 那么第一个绑定ing被销毁。有没有办法在保留第一个绑定的同时添加第二个绑定?
如果'SelectedInternal'是另一个依赖属性,则可以反转绑定方向。除此之外,目前尚不清楚为什么你有这种内部视图模型。 UserControls通常不应该有一个内部视图模型。 – Clemens
@Clemens我的确考虑过摆脱内部视图模型。那是通常编写库控件的方式,没有视图模型,而是代码控制的代码隐藏?但是如果我想坚持使用MVVM模式呢?也许是不可能的。 – McGarnagle
只有内部和私人的模式是没有用的。你也可以在你的控件的代码后面添加私有属性。 – Clemens