2017-11-28 6 views
0

C#を初めて使用しているため、CustomSortがSortDescriptionsをクリアしていることがわかりました。これで、自分のデータグリッドのカスタムマルチカラムソートを許可する方法がちょっと残っています。あなたは、私が把握しようとしています特定の行はこれですmy previous question複数列のCustomSort ListCollectionView

に私のコードを見ることができます

:カスタムの並べ替え私のIntegerSortで

lcv.CustomSort = new IntegerSorter(lcv.SortDescriptions); 

、私はSortDescriptionsが1以上が含まれているかどうかをチェックしていますそうであれば、それに応じて複数列のソートを実行します。ただし、これは、ユーザーが列をShift +クリックするたびに、ソートの説明をListCollectionViewに追加するという事実に依存しています。これは、私が行うすべてのカスタムソートの後にリセットされるため、うまくいきません。

既知の回避策はありますか?カスタムソートでマルチカラムソートを行う正しい方法は何ですか?

ありがとうございました。

+0

@BASEERHAIDER、リサイズ= WPF。 – Sinatr

答えて

0

最初にカスタムソートを作成するときに、ListCollectionViewに含まれるソートの説明のリストを与えます。

次回ユーザーがクリックすると、lcv.SortDescriptionsが空の場合、lcv.CustomSortnullになりません。あなたが最後に与えたIntegerSortになりますが、コンストラクタに渡したSortDescriptionsのリストが引き続きあります。だから、それをつかむ:

var intSort = lcv.CustomSort as IntegerSort; 

は、新しいコレクションを作成し、新しいリストを持つ新しいIntegerSortを作成します。

IntegerSortがSortDescriptionsをパブリックプロパティとして使用できない場合は、それを有効にします。

それとも、そのプライベートを維持したい場合は、この目的のためにIntegerSortのための新しいコンストラクタを記述します。

public IntegerSort(IntegerSort oldSort, SortDecsription add, SortDecsription remove = null) 
{ 
    // Put the new collection together 
} 

用途そうのように:!

lcv.CustomSort = new IntegerSort(lcv.CustomSort as IntegerSort, sortedColumnDescription); 
+0

それはとてもシンプルでした!ありがとうございました!私はCustomSortが私が設定し取得するものであることを完全に知らなかったので、プロパティを維持するでしょう。 –