在WPF应用程序中使用nb-NO Culture的CollectionViewSource的SortDescription

时间:2015-02-13 17:02:08

标签: c# wpf

一个众所周知的问题是SortDescription对某些文化无法正常工作,还是有任何明显的设置我不知道?

在我的情况下,我使用nb-NO并在WPF应用程序中以错误的顺序获取所有列表(ComboBoxes / ListBoxes)。但是,当使用Linq到实体的预排序查询/ List()填充ObservableCollection时,我得到了正确的顺序。

其他任何经历过同样问题的人,并且解决了这个问题?

2 个答案:

答案 0 :(得分:0)

您是否保留数据集的顺序,因为它是从基础数据源返回的?如果您的数据来自SQL Server,Oracle等,那么您可能在海洋的这一边有错误的文化。

答案 1 :(得分:0)

作为一种解决方法,似乎可以实现自己的分拣机。

From jsirr13's answer to a different question

[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();
    }