绑定WPF用户控件的问题

这就是我本来想要的。 具有TextBlockUserControl ,其Text属性绑定到UserControlProp属性。 (这只是我实际问题的一种表现)

下面是我的UserControl的一部分( ClientDetailsControl.xaml

  

接下来是ClientDetailsControl.xaml.cs

 public partial class ClientDetailsControl : UserControl { public static DependencyProperty PropProperty = DependencyProperty.Register("Prop", typeof(String), typeof(ClientDetailsControl)); public String Prop { get; set; } public ClientDetailsControl() { InitializeComponent(); DataContext = this; } } 

现在,在我的主WPF窗口( NewOrder.xaml )中,我正在使用此UserControl

  

MyProp属性在NewOrder.xaml.cs声明如下

 public String MyProp { get { return "HELLO"; } } 

当我运行此代码时,我收到以下错误:

BindingExpression路径错误:在’object”’ClientDetailsControl’(Name =”)’上找不到’MyProp’属性。 BindingExpression:路径= MyProp; DataItem =’ClientDetailsControl’(Name =”); target元素是’ClientDetailsControl’(Name =”); target属性是’Prop’(类型’String’)

当我简单地写

  

有用。 但是,当我尝试将UserControlProp属性绑定到MyProp它不起作用。

我该如何工作?

使用RelativeSource属性,如下所示:

  

它不起作用的原因是绑定路径是相对于DataContext而不是(父)控件。

这就是为什么你可以通过设置RelativeSource来解决这个问题; 在这种情况下,绑定路径使用RelativeSource作为查找属性的起点。

另一种解决方法是命名父节点并设置绑定的ElementName。

MVVM方法是向ViewModel类添加属性,将父控件的DataContext设置为ViewModel的实例,并将父控件和客户端控件绑定到该属性。