【问题标题】:Custom Sorting Algorithm to BindingListCollectionView自定义排序算法到 BindingListCollectionView
【发布时间】:2013-02-16 12:09:47
【问题描述】:

我正在开发一个 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 对象,除了缺少设置自定义排序算法的功能。

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

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

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

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

提前谢谢你。

编辑:

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

希望有人可以帮助我。

【问题讨论】:

    标签: c# wpf sorting datagrid


    【解决方案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;}
    }
    

    【讨论】:

    • 感谢您的回复。那么,我是否必须以我的项目的类型来实现该属性?
    • 是的,谢谢,但实际上我是在措辞是否有办法进行排序但在 DataGrid 派生类中,因为我无法修改我的“DataClass”,因为它是由生成的DataSet XSD 工具,我不属于负责这样做的团队。
    • @Dante 如果数据类来自其他地方,您总是可以从它继承并在那里进行比较
    猜你喜欢
    • 2016-01-09
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2016-10-28
    • 1970-01-01
    相关资源
    最近更新 更多