2

私はいくつかDataGridの'を含むWPFプロジェクトに取り組んでおり、それらのいくつかでは、カスタムの並べ替えアルゴリズムを適用する必要があります。だから私はこれを達成する方法を探していました、そして多くのウェブページで私は次のコードを見つけました:

var myListView = CollectionViewSource.GetDefaultView(myDataGrid.ItemsSource);

ListCollectionView myListCollectionView = myListView as ListCollectionView;

myListCollectionView.CustomSort = new CustomSorter();

.
.
.

public class CustomSorter : IComparer
{
    public int Compare(object x, object y)
    {
        // sorting logic ...
    }
}

これはカスタムソートを実行するための非常に良い方法のようですが、私の問題は、カスタムソートアルゴリズムを設定する機能がないことに加えて、オブジェクトであることが判明したため、変数myListViewをキャストできないことです。ListCollectionViewBindingListCollectionView

私はこの解決策を見つけましたが、彼らは次のことをしようとしているので、私にはうまくいきません:

ListCollectionView coll = new ListCollectionView(CollectionViewSource.GetDefaultView(myDataGrid.ItemsSource));

ただし、ICollectionViewオブジェクト(GetDefaultViewが返す関数)をパラメーターとして受け取るコンストラクターはありません。

では、BindingListCollectionViewオブジェクトにカスタムの並べ替えアルゴリズムを適用する方法はありますか?

前もって感謝します。

編集:

残念ながら、ソリューションはDataGrid一般的である必要があるため、ソリューションは分割されたクラスに配置されています。

誰かが私を助けてくれることを願っています。

4

1 に答える 1

1

MyPropertyToSortOnIComparable を実装するカスタム タイプのプロパティを作成し、並べ替え記述子をリストビューに追加します。

ListView.Items.SortDescriptions.Add(new SortDescription("MyPropertyToSortOn", ListSortDirection.Descending))


public class MyPropertyClass: IComparable{
  public int CompareTo(object obj) {
    //custom comparison implemented here, returns -1,0 or 1
  }
}

...

public class MyDataClass{
   public MyPropertyClass MyPropertyToSortOn {get;set;}
}
于 2013-03-01T21:28:40.310 に答える