在对datagrid进行排序时如何重新排序我的observablecollection

时间:2015-10-01 11:20:50

标签: c# wpf sorting datagrid observablecollection

我在WPF应用程序中有一个datagrid,它的itemssource被绑定到ViewModel中的observablecollection。

<DataGrid 
                  RenderOptions.ClearTypeHint="Enabled"
                  TextOptions.TextFormattingMode="Display"
                  SelectionUnit="FullRow"
                  IsSynchronizedWithCurrentItem="True"
                  IsReadOnly="True"
                  SelectionMode="Single"
                  MinWidth="300" ColumnWidth="*"
                  SelectionChanged="DataGrid_SelectionChanged"  
                  ItemsSource="{Binding AdminEntity, NotifyOnTargetUpdated=True,IsAsync=True, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"
                  SelectedIndex="{Binding selectedIndex}"
                    AutoGenerateColumns="False"  Grid.Column="0" Grid.RowSpan="2">

                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Nom et prénom" MinWidth="100" Binding="{Binding ADM_NOM_PRENOM}" SortMemberPath ="{Binding ADM_NOM_PRENOM}"></DataGridTextColumn>
                        <DataGridTextColumn Header="Mail" MinWidth="100" Binding="{Binding ADM_MAIL}"></DataGridTextColumn>
                        <DataGridTextColumn Header="Session" MinWidth="100" Binding="{Binding ADM_SESS}"></DataGridTextColumn>

                    </DataGrid.Columns>

                </DataGrid>

private ObservableCollection<DB_ADMINISTRATEUR> _admins;
        public ObservableCollection<DB_ADMINISTRATEUR> AdminEntity
        {
            get { return _admins; }
            set { _admins = value; OnPropertyChanged("AdminEntity"); }
        }

这很好用但是当我对datagrid进行排序时,observablecollection不会更新而不会重新排序。 有帮助吗? 感谢。

1 个答案:

答案 0 :(得分:0)

我猜你这样排序或类似的东西:

AdminEntity = new ObservableCollection<DB_ADMINISTRATEUR>(AdminEntity.OrderBy(a=>a.Name));

当你写= new ObservableCollection<...>时,你就会破坏你的约束力。 无论何时绑定集合,都会在控件和集合之间创建一个层,可以像这样访问:

ListCollectionView _adminEntityView = CollectionViewSource.GetDefaultView(AdminEntity )
                                         as ListCollectionView;

然后您可以对此图层应用排序。这不会改变你的收藏,它只会改变它的显示方式

有两种排序方式:

1)有点慢而且容易

_adminEntityView .SortDescriptions.Add( 
                new SortDescription("Name", ListSortDirection.Ascending );

2)快速

_adminEntityView .CustomSort = new AdminSorter(); 

public class AdminSorter: IComparer
{
    public int Compare(object x, object y)
    {
        DB_ADMINISTRATEUR X = x as DB_ADMINISTRATEUR;
        DB_ADMINISTRATEUR Y = y as DB_ADMINISTRATEUR;
        return X.Name.CompareTo(Y.Name);
    }
}