C# BindingListCollectionView的自定义排序算法

C# BindingListCollectionView的自定义排序算法,c#,wpf,sorting,datagrid,C#,Wpf,Sorting,Datagrid,我正在从事一个WPF项目,该项目有一些DataGrid,在其中一些项目中,我需要应用自定义排序算法。因此,我一直在寻找实现这一点的方法,在许多网页中,我发现了以下代码: var myListView = CollectionViewSource.GetDefaultView(myDataGrid.ItemsSource); ListCollectionView myListCollectionView = myListView as ListCollectionView; myListCol

我正在从事一个WPF项目,该项目有一些
DataGrid
,在其中一些项目中,我需要应用自定义排序算法。因此,我一直在寻找实现这一点的方法,在许多网页中,我发现了以下代码:

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
,因为它原来是一个
BindingListCollectionView
对象,而且还缺少设置自定义排序算法的功能

我找到了解决方案,但对我无效,因为他们尝试执行以下操作:

ListCollectionView coll = new ListCollectionView(CollectionViewSource.GetDefaultView(myDataGrid.ItemsSource));
但没有构造函数将ICollectionView对象(函数GetDefaultView返回的对象)作为参数

那么,有没有办法将自定义排序算法应用于BindingListCollectionView对象?

先谢谢你

编辑:

不幸的是,由于该解决方案必须是通用的,因此该解决方案被放置在一个
DataGrid
devided类中


希望有人能帮助我。

将您的属性
MyPropertyToSortOn
设置为实现IComparable的自定义类型,然后在listview中添加排序描述符:

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
  }
}


谢谢你的回复。那么,我必须在我的项目所用的类型中实现该属性吗?是的,谢谢,但实际上我是在DataGrid派生类中进行排序,因为我无法修改我的“DataClass”,因为它是由XSD工具生成的
数据集
,“我不属于负责这项工作的团队。@Dante如果数据类来自其他地方,您可以从中继承并在那里实现比较
public class MyDataClass{
   public MyPropertyClass MyPropertyToSortOn {get;set;}
}