ListBox Groupstyle显示:如何设计组名?

时间:2011-12-21 23:44:18

标签: c# .net xaml

我希望按照创建日期对ListBox中的项目(图像)进行分组。然后我只使用这段代码:

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

但是当我尝试应用某种风格(即边框)时,我没有显示任何组名。只有边框 这是我使用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>

这是我在MainWindow中的ICollectionView:

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

注意:我使用DateTimeToDateConverter()转换器,它返回没有时间的日期。

1 个答案:

答案 0 :(得分:11)

参考:http://msdn.microsoft.com/en-us/library/system.windows.controls.groupstyle.headertemplate.aspx

  

使用GroupDescriptions定义组时,您的视图对象   (一个CollectionViewSource对象或派生自的对象   CollectionView)将每个组包装在CollectionViewGroup对象中。

基本上,当您添加PropertyGroupDescription WPF时,实际上会生成CollectionViewGroup。您需要绑定到Name属性,而不是DateCreated属性(在为您创建的WPF引擎的新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>