【问题标题】:How to reorder my observablecollection when datagrid is sorted对数据网格进行排序时如何重新排序我的 observablecollection
【发布时间】:2015-12-29 10:23:04
【问题描述】:

我在 WPF 应用程序中有一个数据网格,其 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 没有更新,也没有重新排序。 有什么帮助吗? 谢谢。

【问题讨论】:

  • 每个显示集合的 WPF 元素都会创建一个 ICollectionView 并绑定到它。这是一个介于其间的对象,它不反映对基础集合的排序/过滤。 This 线程可以进一步帮助您

标签: c# wpf sorting datagrid observablecollection


【解决方案1】:

我猜你是这样排序的或者类似的:

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

当您写= new ObservableCollection&lt;...&gt; 时,您会破坏您的绑定。 每当您绑定一个集合时,都会在您的控件和集合之间创建一个层,可以像这样访问它:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2020-03-19
    • 2011-05-18
    • 2013-12-23
    • 1970-01-01
    相关资源
    最近更新 更多