我正在创建一个具有ItemsSource
和DisplayMemberPath
属性的自定义控件,并且在ControlTemplate
中有ListBox
个控件{39} ; s绑定到此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>
修改
正如Mike Strobel在评论中提到的那样,当我在一些博客文章中读到时,我删除了ItemTemplate并仅提供了ListBox中的DisplayMemberPath
,但这对于列表来说并不是唯一的(&#&} 39; s没有滚动条):
<ListBox ItemsSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ItemsSource}"
DisplayMemberPath="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DisplayMemberPath}"/>
我甚至对DisplayMemberPath
值进行了硬编码,仍然无效!它只能使用List<string>
而不是List<CustomClass>
解决方案
请原谅,我错过了将DP类型从IEnumerable<string>
更改为IEnumerable<object>
谢谢你的帮助!
答案 0 :(得分:0)
可能是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>