我正在使用新的PagedCollectionView作为我的ItemsSource。
我已将CollectionView绑定到DataGrid,并且需要网格仅显示通过我的过滤器的值,如下所示:
var oc = new ObservableCollection<User>();
var pc = new PagedCollectionView(oc);
dataGrid.ItemsSource = pc;
User类实现INotifyPropertyChanged。我正在应用这样的过滤器:
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
pc.Filter += Include;
}
private bool Include(object obj)
{
return (obj as User).Name == filterText.Text;
}
它有效。问题是,如果我更新用户,则不会更新过滤结果。如果清除并重新应用过滤器就可以了。
当然我可以在PagedCollectionView上调用Refresh()方法,但我认为这可以不用手动刷新视图。
我需要的是“实时过滤”机制。关于如何编码的任何想法?
场景是:用于查看系统上的实时警报的应用程序。假设用户已选择仅在列0中查看“错误”或“警告”的行(这是我的过滤器)。当一行中的column0从“Info”更改为“Warning”时,该行应该是自动可见的(它通过过滤器)而不调用Refresh()。
感谢Larsi