如何在ListView中为每个组应用不同的数据模板

时间:2018-11-02 08:49:30

标签: c# xaml listview uwp datatemplateselector

无论如何,有没有为列表视图中的每个组应用不同的数据模板,我可以执行HeaderTemplateSelector,但如何执行GroupTemplateSelector。

下面为组的HeaderTemplateSelector完成的代码

<DataTemplate x:Key="Template1">
    <StackPanel Margin="0.5">
        <TextBlock Text="{Binding Path=Key}" />
    </StackPanel>
</DataTemplate>
<DataTemplate x:Key="Template2">
    <StackPanel Margin="10">
        <TextBlock Text="{Binding Path=Key}" />
    </StackPanel>
</DataTemplate>

<ListView.GroupStyle>
    <GroupStyle>
        <GroupStyle.HeaderTemplateSelector>
            <local:GroupTemplateSelector Template1="{StaticResource Template1}"
                                         Template2="{StaticResource Template2}" />
        </GroupStyle.HeaderTemplateSelector>
    </GroupStyle>
</ListView.GroupStyle>

C#

public class GroupTemplateSelector : DataTemplateSelector
{
    public DataTemplate Template1 { get; set; }
    public DataTemplate Template2 { get; set; }

    protected override DataTemplate SelectTemplateCore(
        object item, 
        DependencyObject container)
    {
        if (item != null)
        {
            var group = item as IGrouping<string, MyClass>;
            switch (group.Key)
            {
                case "No":
                    return Template1;
                case "Yes":
                    return Template2;
            }
        }

        return base.SelectTemplate(item, container);
    }
}

如何为组内容选择不同的选择器?

1 个答案:

答案 0 :(得分:1)

您可以只实现一个ListView.ItemTemplateSelector,并在其SelectTemplateCore中使用MyClass实例并检查它属于哪个组,然后相应地选择模板。为了获得最佳性能,最好是MyClass有一种快速的方法(例如,一个属性)来告诉群组。