DataGrid默认列过滤器

时间:2013-08-22 13:26:55

标签: c# wpf xaml wpfdatagrid

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

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

是否有一些简单的XAML解决方案,或者只是通过代码我必须做什么?

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

只有当您INotifyPropertyChanged每次向集合调用OnPropertyChanged时,才能按照用户1763180的建议实施AddObservableCollection很方便,因为您不需要处理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;
    }
  }
}

答案 2 :(得分:0)

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

此代码只是手动输入而未经过测试,但我做了一些接近的事情

private ObservableCollection<person> persons;

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

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

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