Сетка данных Silverlight 4 не переупорядочивается

Я новичок в Silverlight и RIA. У меня есть простая форма с DataGrid, привязанным к объекту DomainDataSource. Отображаемые строки представляют заголовки разделов, отображаемых на веб-странице. Один из столбцов называется OrdinalPosition, и я указал, что сетка сортируется по этому столбцу. У меня есть настраиваемый столбец с кнопками со стрелками вверх и вниз. Желаемое поведение состоит в том, что когда пользователь нажимает кнопки вверх / вниз, OrdinalPosition увеличивается / уменьшается, чтобы они могли указать, в каком порядке появляются разделы.

Если я вручную изменяю значение в столбце OrdinalPosition, как только я выхожу из строки, сетка меняет свой порядок. Однако, если я использую программный код для изменения значения, сетка не меняет порядок (даже если сетка отображает новое значение). Вот мой код для нажатия кнопки ...

    private void incrementOrdinal(object sender, System.Windows.RoutedEventArgs e)
    {
        Button btn = (Button)sender;
        Section s = (Section)sectionDataGrid.SelectedItem;
        s.Ordinal++;
        sectionDataGrid.CommitEdit();
    }

Есть ли что-то, что я должен сделать, чтобы дать команду сетке изменить порядок ее записей?


person lJohnson    schedule 29.12.2009    source источник


Ответы (1)


DomainDataSource не будет повторно сортировать данные автоматически при изменении записей, если только интерфейс IEditableCollectionView не используется для применения изменений через данные, которые DomainDataSource предоставляет через свои Data или DataView.

Попробуйте что-нибудь вроде следующего:

IEditableCollectionView view = (IEditableCollectionView)selectionDataGrid.ItemsSource;
Section s = view.CurrentItem;
view.EditItem(s);
s.Ordinal++;
view.CommitEdit();

Это то, что DataGrid выполняет при редактировании через пользовательский интерфейс. ItemsSource привязан к свойству DomainDataSource.Data, которое является экземпляром класса DomainDataSourceView, представляющего данные IEnumerable, которые были загружены. DomainDataSourceView реализует IEditableCollectionView, и когда CommitEdit вызывается для этого представления после использования EditItem, он повторно сортирует данные на текущей странице.

Обратите внимание, что при наличии изменений локальная повторная сортировка не позволяет элементам перемещаться на текущую страницу или с нее.

person Jeff Handley    schedule 03.02.2010