views:

49

answers:

1

Hello,

I'm using a PagedCollectionView to bind an ObservableCollection<T> to a DataGrid in my Silverlight app. In this case, the source collection can incur an unbounded number of updates during its lifespan. It seems, however, that if I'm using a PropertyGroupDescription to group the elements in the DataGrid then I need to reapply that grouping using PagedCollectionView.GroupDescriptions.Add(...) every time the source collection is updated with an element that doesn't fit into an existing grouping. Is there any way to make the groupings refresh/recalculate automatically?

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

Thanks, and let me know if I can provide any additional information.

A: 

So, as far as I can tell, the grouping operation appears to be a once-off operation that is performed on the data as it exists at the time that the PagedCollectionView.GroupDescriptions collection is manipulated. It seems that the desired groupings do indeed need to be re-applied when the source collection is changed.

I did find one alternative approach for my specific case. Since I'm using an ObservableCollection for the source collection of the view, I can wire up something to the CollectionChanged event of that source collection wherein the PagedCollectionView.GroupDescriptions collection gets cleared and the desired GroupDescription is then reapplied. This doesn't seem totally compliant with good OO practices, nor is it usable if the source collection for the view doesn't implement INotifyCollectionChanged.

I'll leave this open a little longer in case anyone can offer another approach, otherwise I'll just concede.

Thanks again.

Patrick