WPF C # Отображать только группы ICollectionView - PullRequest
0 голосов
/ 12 июня 2019

У меня есть ICollectionView с примененным GroupDescription.Я хотел бы отобразить группу в ListView и НЕ отображать членов группы.

Я также хотел бы использовать свойство из ObservableCollection для привязки к BackgroundColor.

Я прикрепилизображение, чтобы помочь уточнить.Красный текст - это правильное имя группы, которое я хочу отобразить.Я также хотел бы привязать BackgroundColor к каждому имени группы (как оно есть в ItemTemplate), и я хотел бы полностью исключить ItemTemplate (что я не могу сделать сейчас без отображения привязки по умолчанию).

enter image description here

C #

    private string _WorkOrderDisplayName;
    public string WorkOrderDisplayName
    {
        get { return _WorkOrderDisplayName; }
        set { _WorkOrderDisplayName = value; NotifyPropertyChanged("WorkOrderDisplayName"); }
    }

    private string _BackgroundColor;
    public string BackgroundColor
    {
        get { return _BackgroundColor; }
        set
        {
            _BackgroundColor = value;
            NotifyPropertyChanged("BackgroundColor");
        }
    }


//WorkOrdersICollectionView
WorkOrdersGroupingICollectionView = new CollectionViewSource { Source = AllEstimateItemsForJobObsCollection }.View;
WorkOrdersGroupingICollectionView.GroupDescriptions.Add(new PropertyGroupDescription("WorkOrderDisplayName"));

WPF

<ListView ItemsSource="{Binding WorkOrdersGroupingICollectionView}">

                            <ListView.GroupStyle>
                                <GroupStyle>
                                    <GroupStyle.HeaderTemplate>
                                        <DataTemplate>
                                            <TextBlock  Text="{Binding Name}" FontSize="16" Foreground="Red" Background="{Binding BackgroundColor}"/>
                                        </DataTemplate>
                                    </GroupStyle.HeaderTemplate>
                                </GroupStyle>
                            </ListView.GroupStyle>

                            <ListView.ItemTemplate>
                                <DataTemplate>
                                    <TextBlock  Text="{Binding WorkOrderDisplayName}" MinWidth="155" Background="{Binding BackgroundColor}" Foreground="Black" Padding="8 3 8 3" FontSize="14" />
                                </DataTemplate>
                            </ListView.ItemTemplate>
                        </ListView>

Пересмотрено с ContainerStyle.Просто нужен BackgroundColor для правильного связывания (это не работает как есть):

<ListView Grid.Row="1" Name="WorkOrderGroupsList" 
          ItemsSource="{Binding WorkOrdersGroupingICollectionView}">

                            <ListView.GroupStyle>
                                <GroupStyle>
                                    <GroupStyle.ContainerStyle>
                                        <Style TargetType="{x:Type GroupItem}">
                                            <Setter Property="Template">
                                                <Setter.Value>
                                                    <ControlTemplate TargetType="{x:Type GroupItem}">
                                                        <TextBlock  Text="{Binding Name}" FontSize="16" Foreground="Red" Background="{Binding BackgroundColor}" Margin="3"/>
                                                    </ControlTemplate>
                                                </Setter.Value>
                                            </Setter>
                                        </Style>
                                    </GroupStyle.ContainerStyle>
                                </GroupStyle>
                            </ListView.GroupStyle>

                        </ListView>

1 Ответ

0 голосов
/ 14 июня 2019

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

<ControlTemplate TargetType="{x:Type GroupItem}">
    <TextBlock  Text="{Binding Name}" FontSize="16" Foreground="Red" 
                Background="{Binding Items[0].BackgroundColor}" Margin="3"/>
</ControlTemplate>
...