2017-05-23 24 views
0

私はオブジェクトのリストを持って、それをCameraListと呼ぶことができます。そしてTreeViewにCameraListを表示するStructureWindowという1つのウィンドウがあります。 CameraListをグリッドに表示するViewerWindowという別のウィンドウがあります。各ウィンドウには、対応するViewModelがあります。どちらのViewModelもCameraListの同じインスタンスを使用する必要があります。これをどのように達成するのですか?どこでCameraListインスタンスを作成しますか?さまざまなViewModelから共有/アクセスするにはどうすればいいですか?WPF - ViewModels間でコレクションの1つのインスタンスを共有する方法

このアプリケーションの私のWinForms版では、静的なプロパティを保持する静的クラスを作成し、そこにCameraListをインスタンス化します。私はどこでもアプリケーションにアクセスできます。

しかし、MVVMパターンを使用してWPFに移行しようとしているので、WPFとMVVMでこれを行うベストプラクティスは何か疑問です。

Here's what I'm trying to achieve

親切に教えてください。乾杯。

+0

あなたがカメラのリストなどのデータソース(モデル)を持つことになります異なるビューのためにMVVMパターンでは –

+0

を一つのモデルを使用します。このリストから、2つの別々のビューモデルを作成できます。そのうちの1つは、ツリービューで必要な階層構造を持ちます。 – Chrille

+0

それぞれのビューにはすでに別のViewModelがあるので、できません。 –

答えて

1

別のベースビューモデルにカメラリストを置き、それをウィンドウのデータコンテキストに設定します。これは、相対ソースバインディングを使用して、両方のビューから、このデータにバインドすることができます:

Binding="{Binding RelativeSource={RelativeSource FindAncestor, 
AncestorType={x:Type Window}}, Path=DataContext.CameraList}" 
+0

Hey Chrille、XAMLではなくViewModelsからそのリストにアクセスしたいのですが?どうやってやるの?ビューをそれぞれのViewModelに親ウィンドウにバインドしないようにします。乾杯。 –

+0

2つの別々のビューモデルを作成するときにリストを渡すことができ、両方のビューモデルからそれを修正し、RelativeSourceを使わずにバインディングできるようにすることができます。 – Chrille

関連する問題