如何在GridView上使用带有数据绑定的CellTemplateSelector
本文关键字:数据绑定 CellTemplateSelector GridView | 更新日期: 2023-09-27 18:25:25
我正试图绑定到GridView的DataContext上的属性,并使用DataTemplateSelector为单元格分配正确的模板,但似乎找不到正确的方法。绑定到DisplayMemberBinding会覆盖模板选择器,但设置CellTemplateSelector属性会绑定到DataContext,而不是我要为其选择模板的属性。
这个答案似乎正好描述了我想要的东西,但我很难找到关于如何实现它所描述的内容的信息:https://stackoverflow.com/a/12519433/1756960。
这是我尝试使用的不起作用的(简化后发布):
<ListView ItemsSource="{Binding Items}">
<ListView.View>
<GridView>
<GridViewColumn Header="Name"
DisplayMemberBinding="{Binding Name}"
CellTemplateSelector="{StaticResource ContentTypeTemplateSelector}" />
<GridViewColumn Header="Data"
DisplayMemberBinding="{Binding}"
CellTemplateSelector="{StaticResource ContentTypeTemplateSelector}" />
</GridView>
</ListView.View>
</ListView>
我建议做的第一件事是用以下两种方式之一区分内容模板选择器。第一种是简单地拥有多个模板选择器类。第二种是有两个实例,它们的模板被分配不同的绑定。
<Resources>
<ns:TemplateSelector x:Key="NameTemplateSelector">
<ns:TemplateSelector.Template1>
<DataTemplate>
<!-- Something bound to Name -->
</DataTemplate>
</ns:TemplateSelector.Template1>
</ns:TemplateSelector>
<ns:TemplateSelector x:Key="DataTemplateSelector">
<ns:TemplateSelector.Template1>
<DataTemplate>
<!-- Something bound to Data -->
</DataTemplate>
</ns:TemplateSelector.Template1>
</ns:TemplateSelector>
对Attached Properties(请参阅MSDN)的引用将使您创建一个属性,将其附加到模板选择器,然后从TemplateSelector的代码访问该数据。