簡體   English   中英

綁定到過濾后的可觀察集合

[英]Binding to a filtered observable collection

我有一個可觀察的A類型集合。

Class A包含一個枚舉 - IsWhite

我的可觀察集合稱為ACollection

我還有 2 個數據網格,一個將綁定到ACollectionitemssource ,其中A項的IsWhite設置為 false,另一個綁定到同一個集合但IsWhite設置為 true 的數據網格。

我怎樣才能做到這一點?

該集合聲明如下;

ObservableCollection<A> ACollection = new ObservableCollection<A>;

和 class

public class A
{
    IsWhite isWhiteEnum { get; set; } = IsWhite.False;
}

我希望一個 datagrid itemssource綁定到ACollection填充IsWhiteFalse的項目,另一個 datagrid itemssource綁定到ACollection填充IsWhiteTrue的項目。

以下是本文相關部分的摘要:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM