0

假设我们有一个 DataGrid,其中填充了 2 列:“First Name”和“Last Name”。

我的目标是按 LastName 对 DataGrid 进行排序。当 ObservableCollection(在 DataGrid 后面)追加或从中删除项目时,它应该可以工作。

是否有一些简单的 XAML 解决方案,或者我必须通过代码来完成?

PS 我知道 ICollectionView 解决方案,但我正在寻找小而自然的解决方案。

4

3 回答 3

0

使用 SortedList 作为您的数据上下文,并在您的 ViewModel 中实现 INotifyPropertyChanged,这将替换 ObservableCollection。
并使用 SortedList 您可以根据需要对集合进行排序...

于 2013-08-22T15:01:08.217 回答
0

按照 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;
    }
  }
}
于 2013-08-22T15:10:42.567 回答
0

我会跳过 DataGrid 并使用只读的 GridView ListView

这段代码只是手动输入的,没有经过测试,但我做了一些接近的事情

private ObservableCollection<person> persons;

public ObservableCollection<person> PersonsSorted { get { return persons.orderby(x => x.LastName; } } 

将 ListView 绑定到 PersonsSorted
它将被添加和删除

使用其他控件添加和删除人员。
如果你编辑将需要实现 iNotifyPropertyChanged

于 2013-08-22T21:24:01.770 回答