2

我正在开发一个有一些DataGrid's 的 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因为它原来是一个BindingListCollectionView对象,除了缺乏设置自定义排序算法的功能外。

我找到了这个解决方案,但它对我不起作用,因为他们尝试执行以下操作:

ListCollectionView coll = new ListCollectionView(CollectionViewSource.GetDefaultView(myDataGrid.ItemsSource));

但是没有构造函数将 ICollectionView 对象(这是 GetDefaultView 返回的函数)作为参数。

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

先感谢您。

编辑:

不幸的是,该解决方案已被放置在一个DataGrid划分的类中,因为该解决方案必须是通用的。

希望可以有人帮帮我。

4

1 回答 1

1

将您的属性设为MyPropertyToSortOn实现 IComparable 的自定义类型,然后将排序描述符添加到您的列表视图:

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;}
}
于 2013-03-01T21:28:40.310 回答