DisplayMemberPath Behavior

本文关键字:Behavior DisplayMemberPath | 更新日期: 2023-09-27 18:29:12


我在想是否有人能向我解释依赖属性DisplayMemberPath是如何工作的?我正在尝试创建具有类似组合框的DisplayMemberPath属性的自定义ItemsControl,换句话说,在设置ItemsSource之后,我希望能够指定要显示的属性
此刻,如果我做了一些事情,比如:

 <cc:MyControl ... DisplayMemberPath="MyObjectDescription" ... > 

(是的,我已经覆盖了DisplayMemberPath,它位于点之外)。

它显示一个项目列表,但每个项目都显示"MyObjectDescription",而不是该属性为ItemsSource中的每个对象保留的值。我相信这是因为我错过了DisplayMemberPath属性如何工作的一些东西
谢谢大家。:)

DisplayMemberPath Behavior

DisplayMemberPath有两种类型。一个支持绑定,另一个必须设置字符串值。在你的情况下,正如我所看到的,你希望实施第二个。为此,请在类型为string的自定义控件中创建一个属性,并将其命名为DisplayMemberPath。使用自定义逻辑覆盖容器中的方法OnInitialized,在自定义逻辑中,您告诉容器通过将绑定的路径更改为DisplayMemeberPath中指定的字符串值来操作绑定到DataContext的路径。一旦任何控件完全初始化,但在即将呈现之前,WPF就会调用OnInitatized。我希望这对你有任何帮助。

我假设您的控件类似于MyControlMyControlItem,类似于ListBox和ListBoxItem。您可以在创建MyControlItem时访问MyControl的DisplayMemberPath,并使用它从DataContext获取数据。

派对迟到了一点,但可能会帮助其他人

如果您的目的只是在ListBox/View上使用项目控制,您可以考虑为项目控制的项目定义数据模板,而不是将其打包在Usercontrol:中

<ItemsControl ItemsSource="{Binding myObjectCollection}">
  <ItemsControl.ItemTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding myObjectProp}"/> (or whatever...)
    </DataTemplate>
  </ItemsControl.ItemTemplate>
</ItemsControl>