棘手的WPF样式问题 - 你能做到吗?

时间:2009-08-18 07:48:13

标签: wpf mvvm observablecollection itemscontrol styling

我有一个可观察的项目集合,其中每个项目都有一个名称和一个“组名”(两个字符串)。

棘手的部分是,在XAML中,我需要设置此集合的样式,使具有相同组名的所有项目彼此相邻,并且组名称显示在顶部。

我为组名的布局设计了用户控件,以及显示的每个项目的布局。我玩过ItemsControl,但不知道如何设置样式,以便具有相同组的项目以某种方式“合并”到使用通用ItemControl用户控件作为其源的相同ItemsControl中,组名显示在顶部。 / p>

我确实通过使用“groups”集合来完成这项工作,每个组中都有一组项目,因为绑定工作完美。但是,我没有考虑到每个项目可能在多个组中(将某人视为“工作朋友”以及“同事”组,因此需要重复)。

非常感谢任何建议或解决方案:)

1 个答案:

答案 0 :(得分:1)

首先,使用CollectionViewSource对项目进行排序:

<CollectionViewSource  x:Key="SortedItems" Source="{Binding YourUnsortedItems}">
    <CollectionViewSource.SortDescriptions>
        <scm:SortDescription PropertyName="GroupName"/>
    </CollectionViewSource.SortDescriptions>
</CollectionViewSource>

然后从ItemsControl(或其他)绑定到它:

<ItemsControl Source="{Binding Source={StaticResource SortedItems}}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <!-- stick your template for each item here -->
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>