将通用列表绑定到WPF数据网格并对其进行排序

时间:2017-05-31 09:12:41

标签: c# wpf sorting data-binding datagrid

关于this question和答案,我已经查看了它,并且我知道使用以下行来在通用列表和数据网格之间进行编程绑定:

LibraryView.SetValue(DataGrid.ItemsSourceProperty, _manager.Library.Songs);

它可以工作,并在视觉上进行排序(虽然在列标题中没有箭头),但是如答案中提到的,它隐式使用ICollectionView。现在我的问题是如何反映绑定数据源的排序,在我的例子中是通用列表。我已经找到了如何使用winforms进行操作,但它比我预期的要复杂得多,而且我无法将其转换为WPF。

提前致谢

2 个答案:

答案 0 :(得分:1)

如果希望视图对源集合进行排序,可以将ItemsSource的{​​{1}}属性强制转换为集合类型并对此进行排序。当然,这需要您了解如何对排序集合进行排序以及您正在处理的源集合类型。

如果DataGrid_manager.Library.Songs,您可以使用List<T>方法对其进行排序:

List<T>.Sort

但一般来说,视图不应该对它所绑定的源集合进行排序。

答案 1 :(得分:0)

您可以自己创建ICollectionView并直接将两个控件绑定到该控件,例如使用here中的类ViewableCollection并访问排序后的ViewableCollection.View /过滤集合。这样,您只需排序一次,所有控件都会反映更改。 DataGrid的默认排序行为也可以在没有额外代码的情况下使用,而且您只需在SortDescriptions上添加/清除当前ViewableCollection.View即可从代码隐藏中进行排序。

如果您选择使用此解决方案,请务必记住将ItemsSource属性绑定到ViewableCollection.View而不是绑定本身。

从表面上看,它的工作方式类似于直接绑定到两个不同控件的Forms中DataView的{​​{1}}。