c# - 让 SortDescription 对字符串进行不同的排序

标签 c# wpf sorting gridview

<分区>

我有以下字符串:

“字符串 1”

“字符串 2”

“字符串 3”

“字符串 15”

“字符串 17”

我希望字符串按上述方式排序。但是,当我使用 SortDescription 对我的列表进行排序时,我得到以下输出:

“字符串 1”

“字符串 15”

“字符串 17”

“字符串 2”

“字符串 3”

我知道有一些算法可以实现这一点,但是有没有办法使用 SortDescription 的内置功能来实现这一点?

private void SortCol(string sortBy, ListSortDirection direction)
{
        ICollectionView dataView =
          CollectionViewSource.GetDefaultView(ListView.ItemsSource);

        dataView.SortDescriptions.Clear();

        SortDescription sd = new SortDescription(sortBy, direction);
        dataView.SortDescriptions.Add(sd);
        dataView.Refresh();
}

sortby 是我的 View 模型中表示我要排序的列的属性的属性名称。

似乎我仅有的两个排序选项是升序和降序。但是它对 CollectionView 进行排序的方式并不是我希望对字符串进行排序的方式。有解决这个问题的简单方法吗?

最佳答案

感谢链接:Natural Sort Order in C#

[SuppressUnmanagedCodeSecurity]
internal static class SafeNativeMethods
{
    [DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
    public static extern int StrCmpLogicalW(string psz1, string psz2);
}

public sealed class NaturalStringComparer : IComparer<string>
{
    public int Compare(object a, object b)
    {
        var lhs = (MultiItem)a;
        var rhs = (MultiItem)b;
        //APPLY ALGORITHM LOGIC HERE
        return SafeNativeMethods.StrCmpLogicalW(lhs.SiteName, rhs.SiteName);
    }
}

下面是我如何使用上述算法比较器:

    private void SortCol()
    {
        var dataView =
                      (ListCollectionView)CollectionViewSource.GetDefaultView(ListViewMultiSites.ItemsSource);
        dataView.CustomSort = new NaturalOrderComparer();
        dataView.Refresh();
    }

关于c# - 让 SortDescription 对字符串进行不同的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15349844/

相关文章:

r - 使用 R 进行语言相关排序

c# - "Fatal error encountered during command execution in mySql "

c# - 从 IntPtr(16 位)数组复制到托管 ushort

c# - 模型绑定(bind)是否通过 asp.net mvc 中的查询字符串工作

wpf - 是否可以为 StaticResource 动态创建 ResourceKey? (例如使用绑定(bind))

c# - 如何实时刷新WPF Toolkit ColumnSeries Chart

c# - 使用 Entity Framework 向模型中注入(inject)一些东西

WPF 渲染线程挂起

javascript - 使用下划线 sortBy 进行对象排序的数组

python - 在 pandas 中应用日期时间格式进行排序