2016-04-16 28 views
1

にソートされていません。アイテムは、私が<code>ObservableCollection<string></code>を持って

public ObservableCollection<string> Collection { get; set; } = new ObservableCollection<string> 
{ 
    "AA", 
    "BB", 
    "CC", 
    "C", 
    "A", 
    "C", 
    "BBB", 
    "AAA", 
    "CCC" 
}; 

ウィンドウでListBoxがこのコレクションに結合します。 Window Loadedイベントでは、並べ替えおよびグループ化ロジックをCollectionの基になるICollectionViewに割り当てています。

private void MainWindow_OnLoaded(object sender, RoutedEventArgs e) 
{ 
    ICollectionView defaultView = CollectionViewSource.GetDefaultView(this.Collection); 
    defaultView.GroupDescriptions.Add(new PropertyGroupDescription(null, new TestGroupConverter())); 

    defaultView.SortDescriptions.Add(new SortDescription("", ListSortDirection.Ascending)); 
    defaultView.SortDescriptions.Add(new SortDescription("", ListSortDirection.Descending)); 
} 

TestGroupConverterその変換方式の文字列の長さを返します。

ので、ここでの結果です:

enter image description here

私はグループを降順でソートするその中の昇順と項目でソートすることが期待。しかし、グループ内のアイテムのSortDescriptionは使用されていないように見えます。降順でソートされていません。

私は何が間違っているのか分かりません。

+0

をソートする最初のSortDescriptionを変更することができ、文字列の最初の文字を取得します: 'collection.OrderBy(X> x.Substring(0,1))' –

+0

@ MaciejLos、私は理解していませんでした。 SortDescriptionは、文字列にDefault Comparerを使用します。 –

+0

@EmperorAiman最初の 'SortDescription'を' new SortDescription( "Length"、ListSortDirection.Ascending) 'に変更しようとしました。 – dkozl

答えて

3

すべての並べ替えの説明は、グループ化を使用していても、同じプロパティを持つ2つの並べ替えの説明がある場合でも、項目に適用されます。残念ながら、あなたは、変換された値によってソートすることはできませんが、あなたはLengthプロパティによって

defaultView.SortDescriptions.Add(new SortDescription("Length", ListSortDirection.Ascending)); 
defaultView.SortDescriptions.Add(new SortDescription("", ListSortDirection.Descending)); 
関連する問題