【问题标题】:filtering observable collection过滤可观察集合
【发布时间】:2015-04-30 07:57:56
【问题描述】:

我是 wpf、Entity Framework 6 和 LINQ 的新手。我有一个绑定到 CollectionViewSource 的数据网格,它绑定到 ObservableCollection。只需按照https://msdn.microsoft.com/en-us/data/jj574514 中的教程进行操作,即可成功从数据网格中添加、更新和删除。本教程展示了如何加载一个完整的表(即类别):

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
     System.Windows.Data.CollectionViewSource categoryViewSource = 
     ((System.Windows.Data.CollectionViewSource)(this.FindResource("categoryViewSource"))); 

     _context.Categories.Load(); 
     categoryViewSource.Source = _context.Categories.Local; 
}

现在我的问题很简单:如果我想加载一些类别,而不是全部类别怎么办?我希望某些用户能够更新特定类别,因此网格将仅加载这些类别。

【问题讨论】:

标签: wpf linq entity-framework-6 observablecollection


【解决方案1】:

如果你想使用 linq,你可以这样尝试:

ObservableCollection<Model> collection = new ObservableCollection<Model>();

ObservableCollection<Model> filteredCollection = new ObservableCollection<Model>(from item in collection where item.ID >0 && item.ID < 10 orderby item.ID select item);

如果我没记错的话,您可以将 observablecollection 直接绑定到 wpf 数据网格的 ItemsSource 属性。

如果你想了解更多关于 linq 的信息,我建议阅读https://msdn.microsoft.com/de-de/library/bb397933.aspx

【讨论】:

  • 在这种情况下,如果我在后面执行一些代码来添加新类别和 savechanges(),网格将永远不会刷新,因为它绑定到新的 observableCollection 和类别表本身。
  • @omarmallat 它对我有用,只需使用属性事件处理程序
  • @mrpink 是的,您必须正确管理 EventHandler。过滤集合后,只需告诉 GUI 刷新即可。
【解决方案2】:

您需要使用过滤器。

categoryViewSource.View.Filter = item =>
                 {
                     Categories category = item as Categories; // hope this are your items
                     return category.Id > 10; // or put whatever condition you want
                 };

上述方法只会返回Id > 10的类别(仅以Id为例)。

还请检查此链接: http://social.technet.microsoft.com/wiki/contents/articles/26673.aspx

【讨论】:

  • 这正是我所需要的。多谢。但是,您错过了 ;在“作为类别的项目”之后:-)
猜你喜欢
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
相关资源
最近更新 更多