如何在WPF中为同一依赖属性添加多个绑定?

3
我有一个包含文本框和按钮的用户控件。当用户选择一个文件夹时,路径将填充到文本框中。在用户控件中,我有一个名为Path的依赖属性。当用户做出选择时,该属性会更新,并且绑定到它的文本框也会更新。
现在,父级视图也需要知道这个Path值。我们可以在父级视图模型中添加一个名为Path的属性。然后将它绑定到什么?用户控件的Path依赖属性?它可以同时绑定到父视图模型和用户控件的文本框吗?
你尝试了向用户控件添加属性但没有成功:
``
没有错误,但是它没有更新视图模型。如果这种方法可行,我可以发布更多代码。
另一个WPF问题:

谢谢@Phil。我加了我尝试过的内容,但是这种方法感觉有些不对,所以我想问一下,这是否是一个合理的方法。 - jglouie
1
顺便提一下,你的ViewModel属性最好不要是静态的。如果是这样,你只能在一个进程中使用一个viewmodel实例。更好的方法是,如果父视图的DataContext也被设置为viewmodel,则执行<v:MyControl DataContext="{Binding}" Path="{Binding Path"} ... /> - Ben Straub
2个回答

4
一个属性只能是一个绑定的目标,但它可以是任意多个绑定的源(即值“来自”哪里)… 因此,您可以将父视图的属性绑定到UserControlPath属性。

它是什么使它只能成为一个目标?如果发生这种情况,你会得到一个错误吗? - StayOnTarget
@UuDdLrLrSs 哇,我写那个已经8年了,我真的不记得了... 我想你会得到一个异常。(对于依赖属性,而不是普通的CLR属性) - Thomas Levesque
我觉得这是一个不太可能的事情,我的记忆力也不会那么好。:) 谢谢你抽出时间来回复。 - StayOnTarget
@StayOnTarget 你好吗? - Clonkex
@Clonkex 抱歉 - “回复一下”。 - StayOnTarget

3
依赖属性可以成为多重绑定的源头。就视图而言,我可以有一个主滑块,其值与五个文本框绑定,这样也能正常工作。
然而,由于你正在使用MVVM,使用视图模型的变化通知属性作为此屏幕的“单一真相来源”可能更为合理。用户控件将写入此属性,父视图将从中读取,就这么简单。
经验法则:如果超过一个视图级组件需要访问属性,请将它们都绑定到视图模型,而不是彼此绑定。

在这种情况下,用户控件(被其他视图使用)是否会与父级紧密耦合? - jglouie
继续阅读,我的第二段告诉你不要那样做。 :) - Ben Straub
抱歉,我不太明白。如果用户控件需要绑定到父视图模型的属性,那么这个用户控件必须知道其父级,对吗? - jglouie
不一定要这样做;将用户控件的DataContext设置为视图模型即可。然后,您可以在用户控件内部执行 <TextBox Text="{Binding Path}"> - Ben Straub
谢谢Ben。这个结合你在问题上的评论帮助我解决了问题。 - jglouie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接