0

我创建了一个 CollectionViewSource 如下:

<CollectionViewSource x:Key="MyGrouping" Source="{Binding MyCollection}">
    <CollectionViewSource.SortDescriptions>
        <componentModel:SortDescription PropertyName="Name"/>
    </CollectionViewSource.SortDescriptions>
    <CollectionViewSource.GroupDescriptions>
        <PropertyGroupDescription PropertyName="Type"/>
    </CollectionViewSource.GroupDescriptions>
</CollectionViewSource>

然后我定义一个 TabControl 如下:

<TabControl ItemsSource="{Binding Groups, Source={StaticResource MyGrouping}}">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Name}"/>
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False">
                <DataGrid.Resources>

......

所有的分组都很完美。但是,我想添加一个包含所有项目(未分组)的附加选项卡。

有没有一种简单的 mvvm 方法来做到这一点?任何帮助将不胜感激。

4

1 回答 1

1

一个基本的想法是使用自定义的 CollectionViewGroup 创建自定义 ListCollectionView。下面是示例。

public class CustomGroupListCollectionView : ListCollectionView
{
    private readonly CustomGroup _allGroup;

    public CustomGroupListCollectionView(IList list)
        : base(list)
    {
        _allGroup = new CustomGroup("All");
        foreach (var item in list)
        {
            _allGroup.AddItem(item);
        }
    }

    public override ReadOnlyObservableCollection<object> Groups
    {
        get
        {
            var group = new ObservableCollection<object>(base.Groups.ToList());
            group.Add(_allGroup);
            return new ReadOnlyObservableCollection<object>(group);
        }
    }
}

public class CustomGroup : CollectionViewGroup
{
    public CustomGroup(object name)
        : base(name)
    {
    }

    public void AddItem(object item)
    {
        ProtectedItems.Add(item);
    }

    public override bool IsBottomLevel
    {
        get { return true; }
    }
}
于 2013-07-08T21:37:30.480 回答