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