2012-03-25 18 views
0

私は3つのリストビューを得ました。 itemsourcesはObservableCollectionにバインドされ、personクラスには整数プロパティ(INotifyPropertyChangedを持つ) "teamID"があります。今すぐリストビューをフィルタリングしたいのですが、簡単に行う方法はありますか(2つの解決策がわかりますが、それは良くないと思います.1つはObservableCollectionを3つ作成することですが、それは複雑になります右のObservableCollectionにすべての人物を追跡して転送するか、チームIDが正しいteamIDの場合はVisible to Visibleのようなトリガーを使用してください^^) 3つのボタンがあり、いずれかのリストビューでアイテム(人物)を選択すると、クリックされたボタンに応じて、チームIDが変更されます。 (しかし、チームIDによってはリストビューに変更してもらいたい)同じ項目の別のフィルタを使ったリストビュー

ご希望の場合は、詳細をお尋ねください。パブリックプロパティ

public List<person> SrtedPerson1 { get { return ListView.DataSource = OriginalList.Where(x => x.TeamId==filteringTeamId).ToList(); }} 

答えて

2

のためにとにかく一覧で包まれますように私はリストを返すパブリックで

私はいくつかのコードを記述せずにそれを行うことはできないと思います。

コレクションを直接ListViewにバインドする代わりにCollectionViewを使用します。これはWPFが内部で行うことですが、独自に作成することで、並べ替えやコースフィルタのような多くのことを制御できます。

CollectionViewSource.GetDefaultView(yourCollection)を使用して作成します。

チームIDが変更されると、フィルタを適用し、チームIDプロパティの設定者にCollectionView.Refresh()を実行します。あまりにも多くのデータがない場合、これは大きな問題ではありません。しかし、多くのデータの上にRefresh()の3つのビューは少し重いかもしれません。

EDIT:

私はあなたが対応するCollectionViewにあなたのリストビューの各1上のソースを設定する必要があることを伝えるのを忘れて、私は、これは明白だと思います。

+0

Okeはこの後、1つのCollectionViewで異なるビューを使用し、それらを別のリストビューにバインドする方法を調べます。 – Maximc

0

バインドボタンのコールが( "SrtedPerson1")をNotifyPropertyChanged持っています。

これだけでは、ListView.DataSource = OriginalList.Where(x => x.TeamId == filteringTeamId)は動的更新を行いません。これはiEnumerableのみを返すためです。あなただけのIEnumerableを返す場合、それは制御

+0

私はこれほどうまくいきませんが、代わりにobservableCollectionsを使用するので、NotifyPropertyChangedを呼び出す必要はありませんか? – Maximc

+0

これは動作しますが、私はボタンイベントでNotifyPropertyChangedを呼び出さなければならないのが好きではありません。それは面倒です。私はCollectionViewSourceなどで答えをもっと期待していましたが、あなたの答えは正しいものにしましょう。しかし、私は自分の質問を書き直すつもりです(より高度なのでボタンを使用してドラッグアンドドロップするので、raisepropertychangeイベントを使用する場所を追跡するのが難しいです) – Maximc

+0

ボタンとボタンイベントがある場合NotifyPropertyChangedは単なるコード行です。 OriginalList.Where(x => x.TeamId == filteringTeamId)の出力はObservableCollectionではありません。あなたは、ボタンを変更することを望んでいたと言いました。 ColletionViewsSourceは、静的フィルタでより多く使用されます。 – Paparazzi

関連する問題