[英]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.