如果您的CollectionView 是ListCollectionView,您可以使用ListCollectionView.CustomSort 属性设置IComparer 进行自定义排序。您可以扩展您当前的ItemGroupConverter 类以实现IComparer 接口,或者创建一个实现IComparer 的新类,该类使用IValueConverter 来比较值。假设您的 Convert 返回一个字符串或其他一些 IComparable:
public class ItemGroupConverter : IValueConverter, IComparer
{
//... your existing implementation of Convert and ConvertBack
public int Compare(object x, object y)
{
return ((IComparable)Convert(x, null, null, null)).CompareTo(((IComparable)Convert(y, null, null, null)));
}
}
并像这样使用它:
((ListCollectionView)cv).CustomSort = new ItemGroupConverter();
另一个选项是您传递IValueConverter 实例以使用的比较器:
public class ConverterComparer : IComparer
{
private readonly IValueConverter converter;
public ConverterComparer(IValueConverter converter)
{
this.converter = converter;
}
public int Compare(object x, object y)
{
return ((IComparable)converter.Convert(x, null, null, null)).CompareTo(((IComparable)converter.Convert(y, null, null, null)));
}
}
并像这样使用它:
((ListCollectionView)cv).CustomSort = new ConverterComparer(new ItemGroupConverter());