2010-09-23 51 views
2

我正在使用PagedCollectionView將我的Silverlight應用中的ObservableCollection<T>綁定到DataGrid。在這種情況下,源集合可能會在其生命週期內導致無限次數的更新。但是,如果我使用PropertyGroupDescriptionDataGrid中的元素進行分組,則需要每次使用PagedCollectionView.GroupDescriptions.Add(...)重新應用該分組時,使用不符合現有分組的元素更新源集合。有沒有辦法讓分組自動刷新/重新計算?PagedCollectionView分組似乎不會在將新元素添加到源集合時自動刷新

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);    
    } 

謝謝,讓我知道如果我可以提供任何其他信息。

回答

2

因此,就我所知,分組操作似乎是在數據上執行的一次性操作,因爲它在操作PagedCollectionView.GroupDescriptions收集時存在。似乎所需的分組確實需要在源集合發生變化時重新應用。

對於我的具體情況,我確實找到了一種替代方法。由於我使用ObservableCollection作爲視圖的源集合,因此我可以將某些事件與該源集合中的CollectionChanged事件連接起來,其中PagedCollectionView.GroupDescriptions集合被清除,然後重新應用所需的GroupDescription。這看起來完全符合良好的面向對象的做法,如果視圖的源代碼集不執行INotifyCollectionChanged,也不可用。

如果有人可以提供另一種方法,我會稍微延長一段時間,否則我只會承認。

再次感謝。

0

綜觀反射器的代碼中,分組正確處理,但如果你在一個DataGrid使用視圖與IsReadOnly == true,你將不會看到分組,同時改變源集合體現。

+0

我沒有使用IsReadOnly。必須有另一個原因。 – Patrick 2010-11-22 17:50:52