簡體   English   中英

綁定到集合的最后N個元素

[英]Bind to last N elements of a collection

我使用wpf工具包圖表來顯示存儲在ObservableCollection一些數據。 當該集合中存儲了N個以上的項目時,僅應顯示最后N個項目(我不能刪除任何項目)。

XAML

<chartingToolkit:LineSeries DependentValueBinding="{Binding DoubleValue,Converter={StaticResource DoubleValueConverter}}" IndependentValueBinding="{Binding Count}" ItemsSource="{Binding Converter={StaticResource DataSourceConverter}}"/>

DataSourceConverter

public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        ICollection<object> items = value as ICollection<object>;

        int N = 300;

        if (items != null)
        {
            return items.Skip(Math.Max(0, items.Count - N)).Take(N);
        }
        else
        {
            return value;
        }  
    }

ItemSource綁定到同時包含“ DoubleValue”和“ Count”的ObservableCollection 似乎DataSourceConverter僅被調用一次,而在我的ObservableCollection更新時則不被調用。

忘記轉換器,在viewmodel類中創建一個新屬性,該屬性將返回最后300個項目(就像您現在在轉換器中聲明的一樣),並綁定到該屬性。

您可以使用ICollectionView並在其上設置一個Filter。

在您的ObservableCollection中,創建一個新的CollectionView:

CollectionView topNItems = (CollectionView) CollectionViewSource.GetDefaultView(myObservableCollection);

接下來,在CollectionView上創建過濾器:

topNItems.Filter += new FilterEventHandler(ShowOnlyTopNItems);

最后是filter事件:

private void ShowOnlyBargainsFilter(object sender, FilterEventArgs e)
{
    int n = 300;
    int listCount = myObservableCollection.Count;
    int indexOfItem = myObservableCollection.IndexOf(e.Item);
    e.Accepted = (listCount - indexOfItem) < n;
}

現在,將圖表綁定到新的topNItems而不是ObservableCollection。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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