Группировка списков WPF, элементы без групп - PullRequest
4 голосов
/ 24 октября 2011

Возможно ли иметь список (или другой элемент управления с SelectedItem), привязанный к ICollectionView, отображающий такие элементы:

  • Item1Name
  • Item2Name
  • ParentName1
    • Item3Name
    • Item4Name
  • ParentName2
    • Item5Name
    • Item6Name

Класс, используемый в качестве источника для представления CollectionViewSource:

public class Item
{
    public string Name { get; set; }
    public string Parent { get; set; }
}

Item1 и Item2 имеют свойство ParentName, установленное в null, Item3 и Item4 имеют "ParentName1" в качестве свойства ParentName и т. Д.

Мне действительно нравится подход со списком, потому что можно выбирать только элементы, а группы нельзя выбирать. Но я могу пойти по неверному пути.

1 Ответ

5 голосов
/ 24 февраля 2012

Наконец, я реализовал селектор стиля для установки стиля группы, если группа равна нулю:

public class NullGroupStyleSelector : StyleSelector
{
    public Style NullGroupStyle { get; set; }
    public Style DefaultStyle { get; set; }

    public override Style SelectStyle(object item, DependencyObject container)
    {
        var element = container as FrameworkElement;
        var group = item as CollectionViewGroup;

        if (element != null && group != null && group.Name == null)
        {
            return this.NullGroupStyle;
        }

        return this.DefaultStyle;
    }
}

и групповые стили с шаблонами:

<Style TargetType="{x:Type GroupItem}" x:Key="NoGroupHeaderStyle">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type GroupItem}">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition />
                        <RowDefinition />
                    </Grid.RowDefinitions>

                    <Border Grid.Row="0">
                        <!-- group name -->
                    </Border>

                    <ItemsPresenter Grid.Row="1" Margin="20,0,0,0" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...