c# – 对于用户控件,如何设置项模板项与用户属性的绑定?

我有一个简单的用户控件,它本质上只是一个带有一些自定义逻辑的AutoCompleteBox.

对于特定实例(人员集合),我希望它看起来像这样:

<sdk:AutoCompleteBox Name="myACB" ItemsSource="{Binding People}" FilterMode="StartsWith" MinimumPrefixLength="2" ValueMemberBinding={Binding LastName}>
  <sdk:AutoCompleteBox.ItemTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding LastName}" />
    </DataTemplate>
  </sdk:AutoCompleteBox.ItemTemplate>
</sdk:AutoCompleteBox>

但是,我想使数据源通用,因此显示值将不同(ValueMemberBinding和模板TextBlock文本).这就是我制作自定义控件的原因,因此我可以指定与属性的差异.

使用用户控件属性设置源代码没有问题,但是我对显示绑定属性有困难.现在我有:

public static DependencyProperty DisplayMemberProperty = DependencyProperty.Register("DisplayMember", typeof(string), typeof(myAutoComplete), null);

public string DisplayMember
{
    get
    { return myACB.ValueMemberPath; }
    set
    {
        myACB.ValueMemberPath = value; // this works fine
        // but how can set the text binding for the templated textblock?
    }
}

我希望DisplayMember属性是为我绑定到AutoCompleteBox的任何类型的自定义集合(人员,汽车等)显示的属性名称.

我认为我不能以编程方式修改datatemplate.有没有办法用绑定(相对来源)来做到这一点?

最佳答案 我不确定这是否有效,但我认为您可以将文本直接绑定到ValueMemberBinding属性并使用转换器从中获取文本…

点赞