gpt4 book ai didi

c# - 多个源绑定(bind)到相同的目标依赖属性

转载 作者:行者123 更新时间:2023-11-30 17:33:30 25 4
gpt4 key购买 nike

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

在我的场景中,依赖属性在用户控件中,第一个绑定(bind)是到它的内部 View 模型,第二个绑定(bind)是用户控件使用者的 View 模型。


下面是为了说明。用户控件的使用者如下所示:

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

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

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

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

LayoutRoot.DataContext = new ViewModelForControl();

到目前为止一切顺利,但如果我随后尝试添加第二个绑定(bind),即内部 View 模型上“SelectedInternal”属性的依赖属性 --

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

-- 然后第一个绑定(bind)被销毁。有没有办法在保留第一个绑定(bind)的同时添加第二个绑定(bind)?

最佳答案

这是不是想多了?

为什么不简单地在自定义控件的代码后面进行管道连接并放弃绑定(bind)呢?

这可以通过

  1. SelectedValue 依赖属性将利用其更改的处理程序,并根据任何更改将 SelectedInternal 设置为新值。
  2. SelectedInternal 更改时写入属性 SelectedValue

您在控件上创建 VM,因此您可以访问 VM 及其属性,这可以为双向传输提供数据向量。


归根结底,绑定(bind)只是通过反射获取引用。在这种情况下,如何获取引用对于简单地在两个属性之间来回写入并不重要。

还是我遗漏了什么?

关于c# - 多个源绑定(bind)到相同的目标依赖属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43769663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com