C# 如何在对datagrid进行排序时对observablecollection重新排序
我在WPF应用程序中有一个datagrid,它的itemssource绑定到ViewModel中的observablecollectionC# 如何在对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"
<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);
}
}