假设我们有一个DataGrid,其中填充了2列:“First Name”和“Last Name”。
我的目标是按LastName对DataGrid进行排序。当ObservableCollection(在DataGrid后面)附加或从中删除项目时,它应该工作。
是否有一些简单的XAML解决方案,或者只是通过代码我必须做什么?
P.S。 我知道ICollectionView解决方案,但我正在寻找小而自然的解决方案。
答案 0 :(得分:0)
使用SortedList作为您的数据上下文,并在ViewModel中实现INotifyPropertyChanged 这将取代ObservableCollection 使用SortedList,您可以根据需要对集合进行排序......
答案 1 :(得分:0)
只有当您INotifyPropertyChanged
每次向集合调用OnPropertyChanged
时,才能按照用户1763180的建议实施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;
}
}
}
答案 2 :(得分:0)
我会跳过DataGrid并使用只读的GridView ListView
此代码只是手动输入而未经过测试,但我做了一些接近的事情
private ObservableCollection<person> persons;
public ObservableCollection<person> PersonsSorted { get { return persons.orderby(x => x.LastName; } }
将ListView绑定到PersonsSorted
它会添加和删除
使用其他控件添加和删除人员 如果编辑则需要实现iNotifyPropertyChanged