[英]Binding issue with WPF user control
这是我本来想要的。 带有TextBlock
的UserControl
,其Text
属性绑定到UserControl
的Prop
属性。 (这只是我实际问题的一种表现)
下面是我的UserControl
的一部分( ClientDetailsControl.xaml
)
<TextBlock Text="{Binding Prop}" />
接下来是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
<userControl:ClientDetailsControl Prop="{Binding MyProp}" />
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:ClientDetailsControl Prop="ABCD" />
有用。 但是,当我尝试将UserControl
的Prop
属性绑定到MyProp
它不起作用。
我该如何做这个工作?
像这样使用RelativeSource
属性:
<userControl:ClientDetailsControl
Prop="{Binding MyProp,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}}"/>
它不起作用的原因是绑定路径是相对于DataContext而不是(父)控件。
这就是为什么你可以通过设置RelativeSource来解决这个问题; 在这种情况下,绑定路径使用RelativeSource作为查找属性的起点。
另一种解决方法是命名父节点并设置绑定的ElementName。
MVVM方式是向ViewModel类添加属性,将父控件的DataContext设置为ViewModel的实例,并将父控件和客户端控件绑定到该属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.