[英]Binding to a filtered observable collection
我有一個可觀察的A
類型集合。
Class A
包含一個枚舉 - IsWhite
。
我的可觀察集合稱為ACollection
。
我還有 2 個數據網格,一個將綁定到ACollection
的itemssource
,其中A
項的IsWhite
設置為 false,另一個綁定到同一個集合但IsWhite
設置為 true 的數據網格。
我怎樣才能做到這一點?
該集合聲明如下;
ObservableCollection<A> ACollection = new ObservableCollection<A>;
和 class
public class A
{
IsWhite isWhiteEnum { get; set; } = IsWhite.False;
}
我希望一個 datagrid itemssource
綁定到ACollection
填充IsWhite
為False
的項目,另一個 datagrid itemssource
綁定到ACollection
填充IsWhite
為True
的項目。
以下是本文相關部分的摘要:
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 在大型數據集上表現更好。 小數據集更好。 除非你的用戶真的很喜歡滾動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.