Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在对datagrid进行排序时对observablecollection重新排序_C#_Wpf_Sorting_Datagrid_Observablecollection - Fatal编程技术网

C# 如何在对datagrid进行排序时对observablecollection重新排序

C# 如何在对datagrid进行排序时对observablecollection重新排序,c#,wpf,sorting,datagrid,observablecollection,C#,Wpf,Sorting,Datagrid,Observablecollection,我在WPF应用程序中有一个datagrid,它的itemssource绑定到ViewModel中的observablecollection <DataGrid RenderOptions.ClearTypeHint="Enabled" TextOptions.TextFormattingMode="Display" SelectionUnit="FullRow"

我在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"); }
        }
这非常有效,但当我对数据网格进行排序时,observablecollection不会更新,也不会重新排序。 有什么帮助吗?
谢谢。

我想你是这样分类的,或者类似的:

AdminEntity = new ObservableCollection<DB_ADMINISTRATEUR>(AdminEntity.OrderBy(a=>a.Name));
然后您可以对该层应用排序。这不会改变你的收藏,只会改变它的显示方式

有两种排序方法:

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

显示集合的每个WPF元素都创建一个ICollectionView并绑定到该视图。这是一个介于两者之间的对象,它不向基础集合反映排序/筛选。线程可以帮助你进一步
_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);
    }
}