绑定WPF用户控件的问题
这就是我本来想要的。 具有TextBlock
的UserControl
,其Text
属性绑定到UserControl
的Prop
属性。 (这只是我实际问题的一种表现)
下面是我的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’)
当我简单地写
有用。 但是,当我尝试将UserControl
的Prop
属性绑定到MyProp
它不起作用。
我该如何工作?
使用RelativeSource
属性,如下所示:
它不起作用的原因是绑定路径是相对于DataContext而不是(父)控件。
这就是为什么你可以通过设置RelativeSource来解决这个问题; 在这种情况下,绑定路径使用RelativeSource作为查找属性的起点。
另一种解决方法是命名父节点并设置绑定的ElementName。
MVVM方法是向ViewModel类添加属性,将父控件的DataContext设置为ViewModel的实例,并将父控件和客户端控件绑定到该属性。