私のアプリケーションのモデルでは、それぞれが「子供」のリストを参照する「親」のリストを持っています(例えば、それぞれに選手のリストを含むフットボールのリスト)。コレクションと親子関係のMVVMの概念
このリストをツリービューで表示します。ツリーのビューモデルクラスと、フットボールチームのビューモデルクラス(「footballteamViewModel」と呼ぶ)を作成しました。ツリーのクラスは、footballteamViewModel-itemsを持つObservableCollectionを保持します。ツリーのitems-sourceはObservableCollectionです。初期化中は、モデル内のすべてのフットボールチームに対して対応するfootballteamViewModelオブジェクトを作成し、それをObservableCollectionに追加します。
私のモデルのサッカーチームのリストをツリーの外側から変更でき、ツリーを更新したいことです。だから、モデルの中のリストからサッカーチームを削除した場合、私はfootballteamViewModel-itemsのObservableCollectionで対応するアイテムを削除する必要があります。
私はモデルからサッカーチームのリストをビューに直接バインドできません。だからモデルのコレクションが変更されるたびに、ViewModelでObservableCollectionを何とか更新する必要があります。
これを処理する私のやり方は、ObservableCollectionをモデルで使用し、ViewModelのcollectionChangedイベントに登録して、モデルコレクションが変更されたときにViewModel(Observable Collection of footballteamViewModelオブジェクト)を更新することです。しかし、これは "正しい"と感じません。より良い方法がありますか?
これを入力している間、同じ問題を正確に記述する別の投稿が見つかりました:WPF/MVVM: Delegating a domain Model collection to a ViewModel。そこの答えは、私がこの問題を解決する方法は全く間違っているわけではないが、まだ別の方法があるのだろうかと疑問に思います。
編集:あなたが提供した最初の回答から私は私の質問に明確な答えがないと仮定します。彼らはすべて役に立ちましたので、それらをすべて読む価値があります。私はBindable Linq/Continuous Linq/Opticsフレームワークへの参照で答えをマークしています。なぜなら、それは他の人が私の質問を最もうかがいます。
私に多くのことができますデータエンティティがモデルであると考えること。または、彼は自分自身を説明することにちょうど悪いかもしれません。 VM内のデータエンティティのラッピングは、コレクション内のプロパティ通知とはほとんど関係のない特定の状況で行われます。 – slugster
彼はこの記事で説明したタスクを達成する3つの方法を示しています(blinq/clinq/self coded)。 – Radioactive