如何在GridView上使用带有数据绑定的CellTemplateSelector?

时间:2014-10-03 17:38:31

标签: c# wpf gridview

我尝试绑定到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>

1 个答案:

答案 0 :(得分:0)

我建议做的第一件事是以两种方式之一来区分您的内容模板选择器。第一个是简单地拥有多个模板选择器类。第二个是有两个实例,其模板分配不同的绑定。

<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>

对附加属性的引用(请参阅MSDN)可以创建属性,将其附加到模板选择器,然后从TemplateSelector的代码中访问该数据。