2011-05-19 22 views
3

ビューモデルのObservableCollectionから派生した(CollectionViewSource経由で)ソートされたItemsControlをバインドしました。私の派生コレクションクラスでは、私はビューモデルでPropertyChangedを処理しています。特定のプロパティ(Order)が変更されたときは、新しいソートされたコレクションを反映するコントロールのレンダリングが必要です。PropertyChangeのItemsControlで派生ObservableCollectionのレンダリング項目の並べ替え

私はPropertyChangedを扱う際に、Resetアクションを指定してOnCollectionChangedを呼び出すことができます。しかし、これは制御に重点を失い、私の状況には望ましくない。

私は変更を処理して、カーソルが残っている状態(またはタブの場合は、次の適切なフィールドに移動)でスムーズに遷移できますか?

+0

多分私は間違った質問をしています。 コントロールオーダーを更新するためにデータバインディングに依存するのは適切ですか?それとも、それは私の負担ですか? – Tyler

答えて

1

Orderプロパティは何に変更されますか?

おそらく、ソースをソートして更新するのではなく、ItemsControlを並べ替えることができます。

これは過去にTabControlを使って行っていました。ユーザーがタブを新しい場所にドラッグ/ドロップすると、TabControlから実際のTabItemが削除され、新しい場所に挿入されます。 SelectedTabは決して変更されていないので、焦点の変更について心配する必要はありませんでした。

+0

私は、コレクション内の各アイテムに対してユーザーコントロールを表示しません。ユーザーがUIを使用してOrder値を変更すると、項目は変更の順序に合わせて変更する必要があります。つまり、データ変更に基づくUIの変更です。それは理にかなっていますか? – Tyler

+0

@タイラーそれは変わらないのですか?たとえば、ユーザーは値を入力して自動的にUIを更新するのですか?それ以降、更新やUIの更新を保存するにはボタンを押す必要がありますか?最初のケースでは、XAML要素を並べ替えるためにコードビハインドで何かを行うことに目を向けるかもしれません.2番目のケースでは、おそらくselectedItemを格納し、アイテムにフォーカスを持ち、リストを再ソート/リフレッシュし、選択された項目/フォーカスバック。 – Rachel

+0

これは最初のシナリオです。私は、MVVMとWPFのデータバインディングを利用する方法を検討しています。これは、わたしが分かりづらい既存のコードベースのシナリオの1つです。私は間違った場所を探していたことが分かります。コードビハインドのビューで適切なイベントを処理する方法を見ていきます。ありがとう。 – Tyler

関連する問題