我在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不会更新而不会重新排序。 有帮助吗? 感谢。
答案 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);
}
}