ListBox Groupstyle display: как создать имя группы? - PullRequest
10 голосов
/ 22 декабря 2011

Я хочу сгруппировать свои элементы (изображения) в ListBox по дате их создания.Затем я просто использую этот код:

<ListBox.GroupStyle>
            <GroupStyle />
</ListBox.GroupStyle>

НО Когда я пытался применить какой-то стиль (например, Border), у меня не отображалось имя группы.ТОЛЬКО Граница Здесь моя новая реализация группировок с использованием DateTime:

<ListBox.GroupStyle>
            <GroupStyle>
                <GroupStyle.HeaderTemplate>
                    <DataTemplate>
                        <Border BorderBrush="Gray" BorderThickness="1" CornerRadius="8">
                            <TextBlock Text="{Binding Path=DateCreated}" FontWeight="Bold" HorizontalAlignment="Center"/>
                        </Border>
                    </DataTemplate>
                </GroupStyle.HeaderTemplate>
            </GroupStyle>
        </ListBox.GroupStyle>

Вот мой ICollectionView в моем MainWindow:

ICollectionView view = CollectionViewSource.GetDefaultView(CollectedFiles);
        view.GroupDescriptions.Add(new PropertyGroupDescription("DateCreated", new DateTimeToDateConverter()));
        view.SortDescriptions.Add(new SortDescription("FileFullName", ListSortDirection.Ascending));

ПРИМЕЧАНИЕ: Я использую конвертер DateTimeToDateConverter (), который возвращает дату без времени.

1 Ответ

12 голосов
/ 22 декабря 2011

Ссылка: http://msdn.microsoft.com/en-us/library/system.windows.controls.groupstyle.headertemplate.aspx

Когда вы определяете группы, используя GroupDescription , ваш объект просмотра (объект CollectionViewSource или объект, производный от CollectionView ) упаковывает каждую группу в объект CollectionViewGroup.

Обычно при добавлении PropertyGroupDescription WPF фактически генерирует CollectionViewGroup. Вам нужно будет привязать свойство Name, а не свойство DateCreated (которого нет в новой CollectionViewGroup, созданной для вас механизмом WPF).

<ListBox.GroupStyle>
    <GroupStyle>
        <GroupStyle.HeaderTemplate>
             <DataTemplate>
                  <Border BorderBrush="Gray" BorderThickness="1" CornerRadius="8">
                       <TextBlock Text="{Binding Path=Name}" FontWeight="Bold" HorizontalAlignment="Center" />
                  </Border>
              </DataTemplate>
          </GroupStyle.HeaderTemplate>
     </GroupStyle>
</ListBox.GroupStyle>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...