Группировки PagedCollectionView, по-видимому, не обновляются автоматически при добавлении нового элемента в исходную коллекцию. - PullRequest
1 голос
/ 23 сентября 2010

Я использую PagedCollectionView для привязки ObservableCollection<T> к DataGrid в моем приложении Silverlight.В этом случае исходная коллекция может иметь неограниченное количество обновлений в течение срока службы.Однако, похоже, что если я использую 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);            
    }

Спасибо, и дайте мне знать, могу ли я предоставить какую-либо дополнительную информацию.

Ответы [ 2 ]

1 голос
/ 24 сентября 2010

Итак, насколько я могу судить, операция группировки, по-видимому, является однократной операцией, которая выполняется с данными в том виде, в котором они существуют во время манипулирования коллекцией PagedCollectionView.GroupDescriptions. Кажется, что желаемые группировки действительно должны быть повторно применены при изменении исходной коллекции.

Я нашел один альтернативный подход для моего конкретного случая. Поскольку я использую ObservableCollection для исходной коллекции представления, я могу подключить что-то к событию CollectionChanged этой исходной коллекции, в котором коллекция PagedCollectionView.GroupDescriptions очищается и затем снова применяется требуемый GroupDescription. Кажется, что это не полностью согласуется с хорошими практиками ОО и не может использоваться, если исходная коллекция для представления не реализует INotifyCollectionChanged.

Я оставлю это открытым немного дольше, если кто-нибудь может предложить другой подход, иначе я просто уступлю.

Еще раз спасибо.

0 голосов
/ 17 ноября 2010

Глядя на код в Reflector, группировки правильно обрабатываются , но если вы используете представление в DataGrid с IsReadOnly == true, вы не увидите отражение групп при изменении исходной коллекции.

...