我正在开发一个有DataGrid
个的WPF项目,其中一些我需要应用自定义排序算法。所以我一直在寻找一种方法来实现这一点,在许多网页中我找到了以下代码:
var myListView = CollectionViewSource.GetDefaultView(myDataGrid.ItemsSource);
ListCollectionView myListCollectionView = myListView as ListCollectionView;
myListCollectionView.CustomSort = new CustomSorter();
.
.
.
public class CustomSorter : IComparer
{
public int Compare(object x, object y)
{
// sorting logic ...
}
}
这似乎是一种非常好的方法来执行自定义排序,但我的问题是我无法将变量myListView
强制转换为ListCollectionView
,因为它原来是{{1}除了缺乏设置自定义排序算法的功能之外的对象。
我找到this解决方案,但它对我不起作用,因为他们尝试执行以下操作:
BindingListCollectionView
但是没有构造函数将ICollectionView对象作为参数(这是GetDefaultView返回的函数)。
那么,有没有办法将自定义排序算法应用于BindingListCollectionView对象?
提前谢谢。
修改
不幸的是,解决方案已放在ListCollectionView coll = new ListCollectionView(CollectionViewSource.GetDefaultView(myDataGrid.ItemsSource));
分类中,因为解决方案必须是通用的。
希望有人可以帮助我。
答案 0 :(得分:1)
制作实现IComparable的自定义类型的属性MyPropertyToSortOn
,然后在列表视图中添加排序描述符:
ListView.Items.SortDescriptions.Add(new SortDescription("MyPropertyToSortOn", ListSortDirection.Descending))
public class MyPropertyClass: IComparable{
public int CompareTo(object obj) {
//custom comparison implemented here, returns -1,0 or 1
}
}
...
public class MyDataClass{
public MyPropertyClass MyPropertyToSortOn {get;set;}
}