繁体   English   中英

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

[英]For a user control, how to set the binding of a item template item to a user property?

我有一个简单的用户控件,它实际上只是一个带有一些自定义逻辑的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属性,并使用转换器从中获取文本。

<TextBlock Text="{TemplateBinding DisplayMember}" />

感谢您的建议。

我无法获得我偏爱的解决方案,但是我的解决方法是仅将datatemplate资源作为属性传递,并将其分配给autocompletebox itemtemplate。

定义模板:

<DataTemplate x:Key="myCustomDT">
    <!-- whatever you want here -->
</DataTemplate>

为它创建用户控件属性:

public static DependencyProperty DisplayTemplateProperty = DependencyProperty.Register("DisplayTemplate", typeof(DataTemplate), typeof(myAutoComplete), null);
public DataTemplate DisplayTemplate {
    get { return myACB.ItemTemplate; }
    set { myACB.ItemTemplate = value; }
}

现在:

<local:myAutoComplete DisplayTemplate="{StaticResource myCustomDT}" />

这不是最好的方法,但现在可以使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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