2012-03-23 87 views
3

另一个WPF问题给大家。如何将多个绑定添加到WPF中的相同依赖项属性?

我有一个包含文本框和按钮的用户控件。该按钮打开“文件夹选择”对话框;当用户选择一个文件夹时,文本框应该填入用户选择的路径。这工作正常。

在用户控件的内部,我有一个名为Path的依赖属性。当用户进行选择时,Path会被更新,绑定到它的文本框也会更新。这很好。

现在,父View也需要知道这个Path值是什么。该从哪里做什么?

我想我们应该添加一个属性到父视图模型名为路径。很简单 - 那我们将它绑定到什么地方?用户控件的路径依赖项属性?这可以同时绑定到父级的View Model和用户控件的文本框吗?

我尝试添加该用户控件的属性没有成功:

<v:MyControl Path="{Binding ViewModels:MyViewModel.Path}" ... />

没有错误,它只是没有更新视图模型。如果这种方法可行,我可以发布更多的代码。

enter image description here

+1

是的,你没试过吗? – Phil 2012-03-23 22:26:32

+0

谢谢@Phil。我添加了我所尝试的内容,但是这种方法有些问题,所以我想我会问,这是否是一种合理的方法。 – jglouie 2012-03-23 22:30:10

+1

顺便说一句,它可能不是一个好主意,您的ViewModel的属性是静态的。如果是这样,您只能在一个进程中将视图模型限制为一个实例。如果你的父视图的'DataContext'也设置为viewmodel,那么最好做''。 – 2012-03-23 22:50:44

回答

3

依赖属性可以是多个绑定的源极,是的。仅仅说到视图,我可以有一个带有五个文本框的主滑块绑定到它的值,并且这将工作得很好。

但是,由于您生活在MVVM中,因此在此屏幕中使用视图模型的更改通知属性作为单一真值源可能更合理。用户控件写入此属性,并且父视图从中读取,就这么简单。

经验法则:如果多个视图级组件需要访问属性,则将它们两者绑定到视图模型,而不是彼此绑定。

+0

在这种情况下,用户不会控制(这是否被其他视图使用)与父级紧密耦合? – jglouie 2012-03-23 22:31:07

+0

继续阅读,我的第二段告诉你不要这样做。 :) – 2012-03-23 22:33:57

+0

对不起,我没跟着。如果用户控件需要绑定到父视图模型的属性,那么该用户控件必须知道父项,对吗? – jglouie 2012-03-23 22:37:36

4

一个属性可以是只有一个绑定的目标,但它可以是来源(即值“来自”)的绑定数量,因为你想要...所以是的,你可以绑定一个属性UserControlPath属性的父视图。

相关问题