2012-01-15 12 views
0

私は(私はビューモデルでのSelectedItemプロパティにバインドさのSelectedItemプロパティを持つリストボックスを持って3つのユーザーコントロール(および3つのviewmodels)スライダービューでWPF、MVVM、MasterDetailPage

MasterView: 
-> MenuView (-> MenuViewModel) 
-> InfoView (-> InfoViewModel) 
-> SliderView (-> SliderViewModel) 

が含まれていたマスターページ、ユーザーコントロールを得ましたSliderViewModel)

SelectedItemが変更されたとき、私はInfoViewModelにバブルしてInfoViewを更新したいと考えています。

私はwinformsで何度もやったようなイベントでもできますが、私はmvvmパターンのベストプラクティス方法を探しています。

もう少し小さな質問は、私もMasterViewページのビューモデルを作成する必要がありますか? 3人のユーザーのコントロールを一緒に組み合わせる以外には何も含まれていません。

あなたの助けを大幅に私はこのシナリオで最高のMVVMのベストプラクティスについてはよく分からないですが、私はMVVMを通してそれを行うための一つの方法を考えることができ

答えて

0

を理解されるであろう。

MasterViewModelを作成し、他のビューモデル間の通信用にmasterViewModelのプロパティを公開することができます。

class MasterViewModel 
{ 
    MenuViewModel; 
    InfoViewModel; 
    SliderViewModel; 

    public CommunicationProperty 
    { 
     set 
     { 
     InforViewModel.SomeProperty = value; 
     } 
    } 
} 

class SliderViewModel 
{ 
    pubic SliderViewModel(MasterViewModel masterViewModel) 
    { 
     //hold reference of master view model in a variable 
    } 

    public SelectedItem 
    { 
     set 
     { 
      // change the info view model via master view model 
      masterViewModel.CommunicationProperty = value; 
     } 
    } 
} 
0

以下のようないくつかのオプションがあります:

  1. (それがDependencyObjectから継承されている場合)あなたは、あなたのビュー モデルクラスの依存関係プロパティとしてのSelectedItemを宣言すること
  2. は、あなたは、通常のようにSelectedItemを宣言してもよいですプロパティを開き、ビューモデル クラスをINotifyPropertyChangedインターフェイスを実装し、 SetterのPropertyChangedイベントを発生させます。

WPFには新しい概念がたくさんありますが、それでもイベントを介してビジネスロジックと通信します。