我正在创建一个具有ItemsSource
和DisplayMemberPath
属性的自定义控件,并且在ControlTemplate
中有一个与此ListBox
绑定的ItemsSourse
控件,我想在此ListBox中使用DisplayMemberPath
指定的属性,遗憾的是这不起作用:
<ListBox ItemsSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ItemsSource}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMemberPath}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
编辑
正如迈克斯特罗贝尔在评论中提到的那样,当我在一些博客文章中读到时,我删除了ItemTemplate并仅在ListBox中提供了DisplayMemberPath
,但这甚至没有提到列表(没有滚动条):
<ListBox ItemsSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ItemsSource}"
DisplayMemberPath="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMemberPath}"/>
我甚至硬编码DisplayMemberPath
值仍然没有工作!,它只与List<string>
合作而不是List<CustomClass>
解
请原谅,我错过了从IEnumerable<string>
更改DP类型到IEnumerable<object>
感谢您的帮助!
可能是TemplatedParent对象不是你想象的那样吗?您是否尝试按指定类型遍历?
<ListBox ItemsSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ItemsSource}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type **TYPE**}}, Path=DisplayMemberPath}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>