我有一个A
类型的可观察的集合。
类A
包含一个枚举-IsWhite
。
我可观察的集合称为ACollection
。
我还有2个数据网格,其中一个itemssource
绑定到ACollection
,其中A
项将IsWhite
设置为false,另一个绑定到同一集合,但IsWhite
设置为true。
我该如何实现?
该集合的声明如下;
ObservableCollection<A> ACollection = new ObservableCollection<A>;
和班级
public class A
{
IsWhite isWhiteEnum { get; set; } = IsWhite.False;
}
我希望一个数据网格itemssource
绑定到ACollection
,填充其中IsWhite
是False
的项目,另一个数据网格itemssource
绑定到{{1 }}弹出ACollection
为IsWhite
的项目。
答案 0 :(得分:1)
这是本文相关部分的说明:
https://social.technet.microsoft.com/wiki/contents/articles/26673.wpf-collectionview-tips.aspx
您不想过滤集合的默认视图,因为那样您的过滤器将同时应用于两个数据网格。
这段代码获得两个独立的视图:
PeopleView = (CollectionView)new CollectionViewSource { Source = People }.View;
LevelsPeopleView = (CollectionView)new CollectionViewSource { Source = People }.View;
人是一个可观察的人的集合。
这两个视图都是集合视图,例如。
public CollectionView LevelsPeopleView { get; set; }
视图绑定在TwoCollectionViews.xaml中,例如
<DataGrid ....
ItemsSource="{Binding PeopleView}"
本文还介绍了各种过滤器,例如msdn方法:
private void ShowOnlyBargainsFilter(object sender, FilterEventArgs e)
{
AuctionItem product = e.Item as AuctionItem;
if (product != null)
{
// Filter out products with price 25 or above
if (product.CurrentPrice < 25)
{
e.Accepted = true;
}
else
{
e.Accepted = false;
}
}
}
或更复杂的方法。
您设置了一个过滤器:
LevelsPeopleView.Filter = FirstOfLevel_Filter;
如果视图已经从该collectionview中获取了数据,则将不会发生任何事情。您还需要做
LevelsPeopleView.Refresh();
这种过滤效率很低,而linq在大型数据集上效果更好。小型数据集更好。除非您的用户真的很喜欢滚动。