2011-12-21 3 views
8

Я хочу сгруппировать свои объекты (изображения) в ListBox к дате его создания. Тогда я просто использовать этот код:ListBox Groupstyle display: Как создать название группы?

<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() конвертер, который возвращает даты без времени.

ответ

8

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

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

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

<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> 
+0

Wow..great .. действительно пропустите этот один. Большое спасибо .. его отображение. – Raf

Смежные вопросы