1


如果有人可以向我解释依赖属性DisplayMemberPath是如何工作的,我正在徘徊?我正在尝试创建具有类似 ComboBox 的 DisplayMemberPath 属性的自定义 ItemsControl,换句话说,在设置 ItemsSource 之后,我希望能够指定要显示的属性。
目前,如果我这样做:

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

(是的,我已经覆盖了 DisplayMemberPath,除此之外)。

它显示一个项目列表,但它们每个都显示“MyObjectDescription”,而不是该属性为 ItemsSource 中的每个对象保存的值。我相信它是因为我缺少关于 DisplayMemberPath 属性如何工作的一些东西。
谢谢大家。:)

4

3 回答 3

4

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

于 2013-08-28T07:10:03.513 回答
0

我假设您的控件就像 ListBoxMyControlMyControlItemListBoxItem。您可以在创建时访问 MyControl 的 DisplayMemberPath,MyControlItem并使用它从 DataContext 获取数据。

于 2013-08-28T05:50:26.413 回答
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>
于 2019-05-14T14:18:32.040 回答