如果有人能向我解释依赖属性 DisplayMemberPath 如何工作,我就会徘徊?
我正在尝试创建具有ComboBox的DisplayMemberPath属性的Custom ItemsControl,换句话说,在设置ItemsSource之后,我希望能够指定要显示的属性。
如果我这样做的话,那就是:
<cc:MyControl ... DisplayMemberPath="MyObjectDescription" ... >
(是的,我已经覆盖了DisplayMemberPath,除此之外)。
它显示一个项目列表,但它们每个都显示“MyObjectDescription”,而不是该属性为ItemsSource中的每个对象保存的值。
而且我相信它,因为我遗漏了DisplayMemberPath Property的工作原理
谢谢大家。 :)
答案 0 :(得分:4)
DisplayMemberPath有两种类型。一个支持Binding,另一个支持设置字符串值。在你的情况下,我可以看到你希望实现第二个。为此,请在类型为string的自定义控件中创建一个属性,并将其命名为DisplayMemberPath。使用自定义逻辑覆盖容器中的方法OnInitialized,通过更改绑定到DisplayMemeberPath中指定的字符串值的路径,告诉容器操作绑定到DataContext的路径。一旦任何控件完全初始化但在即将渲染之前,WPF会调用OnInitalized。我希望这对你有所帮助。
答案 1 :(得分:0)
我假设您的控件类似于MyControl
和MyControlItem
,如ListBox和ListBoxItem。
您可以在创建MyControlItem
时访问MyControl的DisplayMemberPath,并使用它来从DataContext获取数据。
答案 2 :(得分:0)
参加聚会有点晚,但也许其他人可以得到帮助
如果您的目的仅仅是在ListBox / View上使用Itemscontrol,则可以考虑为itemscontrol的Items定义Datatemplate,而不是将其包装在Usercontrol中:
<ItemsControl ItemsSource="{Binding myObjectCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding myObjectProp}"/> (or whatever...)
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>