2012-04-24 19 views
2

私はよく慣れていない新しいMVVMプロジェクトをWPFで開始しており、適切なMVVMアプローチを使用していることを確認したいと考えました。適切なMVVM親子ビューモデルの情報を渡す方法

私は、次のしている:MasterViewModelがある場合は、各タブは独自ののviewmodels

  • で別のユーザーコントロールが含まれてい

    • を私は、独自のViewModelを含むマスターユーザーコントロールを持っているし、TabControlの
    • 作成され、そのプロパティの1つが設定されます(MasterIdと呼ぶ)
    • MasterIdプロパティの変更をマスタービューモデルから子ビューモデルに伝播する必要があります

    このシンプルなシナリオを実装するための最も簡単なMVVMアプローチは何ですか?

  • 答えて

    3

    私はあなたのIDが設定されますか、あなたの子ビューモデルは、あなたが設定することができます作成​​されます場合はMasterViewModel

    public ObservableCollection<ViewModelBase> Tabs { get; private set; } 
    

    のコレクション内の子ビューモデルを持っている傾向があるようにそれがTabControl秒に来て、それらのプロパティ

    public int MasterId 
    { 
        get { return _masterId; } 
        set { _masterId = value; 
          foreach(var vm in Tabs) 
          vm.MasterId = value; 
          NotifyPropertyChanged("MasterId"); 
         } 
    } 
    
    +0

    これは素晴らしいソリューションのように聞こえる。 WPFで私の経験が示されない1つの質問ですが、ViewModelBaseビューモデルを子のユーザーコントロールのデータコンテキストを別のタブに表示する方法をどのようにマッピングしますか?現在のところ、私のタブは**デザインタイム**の "子"ユーザコントロールによって設定されているので、あなたの答えに示唆したようにObservableCollection を私のMasterViewModelに持つことはできません。提案と一致するようにデザインを変更するにはどうすればよいですか?どうもありがとう。 – Talisker

    +0

    データテンプレートを使用するこの回答を見てください。 http://stackoverflow.com/a/5651542/373706もしあなたがdesigntimeのコントロールを見たいのであれば、 'd:DataContext'メソッドを使うことができます。ここでは、designtimeだけのviewmodelを構築します。 – aqwert

    関連する問題