我正在使用PagedCollectionView
将ObservableCollection<T>
绑定到我的Silverlight应用中的DataGrid
。在这种情况下,源集合可以在其生命周期内产生无限数量的更新。但是,似乎如果我使用PropertyGroupDescription
对DataGrid
中的元素进行分组,那么每次使用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}}
谢谢,如果我能提供任何其他信息,请告诉我。
答案 0 :(得分:1)
因此,据我所知,分组操作似乎是对数据执行的一次性操作,因为它在操作PagedCollectionView.GroupDescriptions
集合时存在。当源集合发生变化时,似乎确实需要重新应用所需的分组。
我确实为我的具体案例找到了另一种方法。由于我正在使用ObservableCollection作为视图的源集合,因此我可以将某些内容连接到该源集合的CollectionChanged
事件,其中PagedCollectionView.GroupDescriptions
集合已被清除,并且所需的GroupDescription
然后重新申请。这似乎不完全符合良好的OO实践,如果视图的源集合没有实现INotifyCollectionChanged
,它也不可用。
如果有人可以提供其他方法,我会稍微公开一下,否则我会让步。
再次感谢。
答案 1 :(得分:0)
查看Reflector中的代码,分组 已正确处理,但如果您使用DataGrid
中的IsReadOnly == true
视图,那么在更改时您将看不到分组源集合。