假设我们有一个 DataGrid,其中填充了 2 列:“First Name”和“Last Name”。
我的目标是按 LastName 对 DataGrid 进行排序。当 ObservableCollection(在 DataGrid 后面)追加或从中删除项目时,它应该可以工作。
是否有一些简单的 XAML 解决方案,或者我必须通过代码来完成?
PS 我知道 ICollectionView 解决方案,但我正在寻找小而自然的解决方案。
假设我们有一个 DataGrid,其中填充了 2 列:“First Name”和“Last Name”。
我的目标是按 LastName 对 DataGrid 进行排序。当 ObservableCollection(在 DataGrid 后面)追加或从中删除项目时,它应该可以工作。
是否有一些简单的 XAML 解决方案,或者我必须通过代码来完成?
PS 我知道 ICollectionView 解决方案,但我正在寻找小而自然的解决方案。
使用 SortedList 作为您的数据上下文,并在您的 ViewModel 中实现 INotifyPropertyChanged,这将替换 ObservableCollection。
并使用 SortedList 您可以根据需要对集合进行排序...
按照 user1763180 的建议实施INotifyPropertyChanged
,只有在OnPropertyChanged
每次调用Add
集合时都有效。ObservableCollection
很方便,因为您不需要处理INotifyPropertyChanged
接口。
最简单的方法是打电话
dataGridView.Sort(dataGridView.Columns[1], ListSortDirection.Ascending);
在你的DataGridView
.
另一种选择:调用Insert
或覆盖用于自动保持集合排序的Add
方法Insert
。
public void Add(string firstName, string lastName)
{
for (int i = 0; i < _lastNames.Count; i++)
{
if (lastName.CompareTo(_lastNames.Items[i]) >= 0)
{
_lastNames.Insert(i, lastName);
_firstNames.Insert(i, firstName);
break;
}
}
}
我会跳过 DataGrid 并使用只读的 GridView ListView
这段代码只是手动输入的,没有经过测试,但我做了一些接近的事情
private ObservableCollection<person> persons;
public ObservableCollection<person> PersonsSorted { get { return persons.orderby(x => x.LastName; } }
将 ListView 绑定到 PersonsSorted
它将被添加和删除
使用其他控件添加和删除人员。
如果你编辑将需要实现 iNotifyPropertyChanged