Как применить другой шаблон данных для каждой группы в ListView - PullRequest
0 голосов
/ 02 ноября 2018

Можно ли в любом случае применить разные шаблоны данных для каждой группы в просмотре списка, я могу сделать 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 голосов
/ 02 ноября 2018

Вы можете просто реализовать ListView.ItemTemplateSelector и в его SelectTemplateCore взять экземпляр MyClass и проверить, к какой группе он принадлежит, и соответственно выбрать шаблон. Чтобы добиться максимальной производительности, было бы лучше, если бы у MyClass был быстрый способ (например, свойство), с помощью которого вы могли бы рассказать группе.

...