我创建了一个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方法吗?任何帮助将不胜感激。
答案 0 :(得分: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; }
}
}