将新元素添加到源集合时,似乎不会自动刷新PagedCollectionView分组

时间:2010-09-23 19:40:30

标签: c# .net wpf silverlight wpfdatagrid

我正在使用PagedCollectionViewObservableCollection<T>绑定到我的Silverlight应用中的DataGrid。在这种情况下,源集合可以在其生命周期内产生无限数量的更新。但是,似乎如果我使用PropertyGroupDescriptionDataGrid中的元素进行分组,那么每次使用PagedCollectionView.GroupDescriptions.Add(...)更新源集合时,我都需要使用 public ObservableCollection<DataItem> DataItems { get { return _dataItems; } private set { _dataItems = value; } } public PagedCollectionView ItemsView { get { return _itemsView; } private set { _itemsView = value; } } public MyGridControl() { // Initialize data members DataItems = new ObservableCollection<DataItem>(); ItemsView = new PagedCollectionView(GridDataItems); Loaded += new RoutedEventHandler(MyGridControl_Loaded); } private void MyGridControl_Loaded(object sender, RoutedEventArgs e) { _myGrid.ItemsSource = ItemsView; } public void RegisterDataItem(DataItem item) { DataItems.Add(item); /* To get grouping to work like I want, I have to add this: * ItemsView.GroupDescriptions.Clear(); * ItemsView.GroupDescriptions.Add(new PropertyGroupDescription("GroupName")); */ } public void UnregisterError(DataItem item) { DataItem.Remove(item); } 重新应用该分组。不适合现有分组的元素。有没有办法让分组自动刷新/重新计算?

{{1}}

谢谢,如果我能提供任何其他信息,请告诉我。

2 个答案:

答案 0 :(得分:1)

因此,据我所知,分组操作似乎是对数据执行的一次性操作,因为它在操作PagedCollectionView.GroupDescriptions集合时存在。当源集合发生变化时,似乎确实需要重新应用所需的分组。

我确实为我的具体案例找到了另一种方法。由于我正在使用ObservableCollection作为视图的源集合,因此我可以将某些内容连接到该源集合的CollectionChanged事件,其中PagedCollectionView.GroupDescriptions集合已被清除,并且所需的GroupDescription然后重新申请。这似乎不完全符合良好的OO实践,如果视图的源集合没有实现INotifyCollectionChanged,它也不可用。

如果有人可以提供其他方法,我会稍微公开一下,否则我会让步。

再次感谢。

答案 1 :(得分:0)

查看Reflector中的代码,分组 已正确处理,但如果您使用DataGrid中的IsReadOnly == true视图,那么在更改时您将看不到分组源集合。