2016-10-21 10 views
0

私はWPFとMVVMの新機能で、頭痛の原因となっています。ナビゲーションに関する問題のため、私はすべてのコンテンツを一度に見えるようにすることにしました。私は私の2つの他のViewModels(StudentViewModelAddStudentsViewModel)を含む新しいViewModel(MainViewModel)を作成すると思った。WPF MVVM ViewModelにViewModelsが更新されていない

MainViewModelはこのようなものが含まれています

private StudentViewModel _studentVM; 
private AddStudentsViewModel _addStudentsVM; 

public StudentViewModel StudentVM 
{ 
    get { return _studentVM; } 
    set 
    { 
     if (_studentVM != value) 
     { 
      _studentVM = value; 
      NotifyPropertyChanged("StudentVM"); 
     } 
    } 
} 

を(公共AddStudentsViewModelAddStudentsVMが同様に存在している、私はちょうどこの短いを維持しようとしている)私は私のメインビューにStudentVMAddStudentsVMを成功裏にバインドされています初期化段階やデバッグ時にプログラムで値を設定できるので、ボタンのクリックが正しい方法にリダイレクトされていることがわかります。私の主なビューはこれらの変更を反映していないが、私は正常にオブジェクトに学生を追加しているようだ。

MainViewModelに何かがありますか?あるいは、ViewModelがその中の他のViewModelの変更を見ることができないのですか?

+1

あなたの投稿は、ビューコードの一部を追加すると、まだ短くなります。 – tgpdyk

+0

子ビューモデルで 'NotifyPropertyChanged()'を呼び出すメソッドを公開する必要があります。その後、メソッドでは、プロパティ名に空の文字列を使用するだけで、そのビューモデルからのビュー内のすべてのバインディングを更新することができます。 –

+0

質問にさらに情報を追加する必要があります。あなたはセッターと呼んでいるプロパティはどれですか?ビューはどのようにdatacontextを参照していますか? xamlのバインディングはどのように見えますか?あなたは何を期待していますか、実際に何を得ていますか?この情報を提供すれば、より具体的な回答が得られるはずです。 –

答えて

0

他の2つのビューモデルを含むビューモデル。それについて少し考えてみてください。それは良い考えではありません。

とにかく、含めるビューモデルにもINotifyPropertyChangedを実装する必要があります。 MainViewModelを含むだけでなく、

多分それは欠陥ですか?

+1

小規模なクラスでアプリケーションの機能をモジュール化し、それらのクラスを一緒に組み立てるのはどうですか?これは、OOPが作成されたものです。 –

+1

これを「良い考えではない」と宣言した場合、少なくとも理由を教えてください。正直なところ、何が悪いのか分かりません。 – phifi

0

ビューは、あなたのビューがたStudentVM.Property上の変更を反映するために、StudentVM.PropertyのようなプロパティStudentVMにネストされたナビゲーションを通じてStudentViewModel内部のいくつかのプロパティにバインドされている場合は、StudentVM(ないStudentVM.Property)が変更されたことをビューに通知することを必要とするであろうが。

したがって、バインディングを定義する方法と、どのプロパティでPropertyChangedイベントを発生させるかによって異なります。

関連する問題