繁体   English   中英

绑定WPF用户控件的问题

[英]Binding issue with WPF user control

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

下面是我的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" />

有用。 但是,当我尝试将UserControlProp属性绑定到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM