Silverlight 4 datagrid没有重新排序

时间:2009-12-29 16:34:05

标签: silverlight sorting datagrid ria

我是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();
    }

我应该做些什么来提示网格重新排序其记录?

1 个答案:

答案 0 :(得分:0)

除非使用IEditableCollectionView接口通过DomainDataSource通过其Data或DataView公开的数据应用更改,否则DomainDataSource不会在记录更改时自动重新排序数据。

尝试以下内容:

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

这是DataGrid在通过UI进行编辑时执行的操作。 ItemsSource绑定到DomainDataSource.Data属性,该属性是DomainDataSourceView类的实例,表示已加载的IEnumerable数据。 DomainDataSourceView实现IEditableCollectionView,并且在使用EditItem后对该视图调用CommitEdit时,它将对当前页面上的数据进行重新排序。

请注意,当有更改时,在本地重新排序将不允许项目移入或移出当前页面。