2016-11-17 4 views
1

MainWindowViewModel.csには、viewnameをパラメータとして渡してビューをナビゲートするメソッドがあります。WPFでの表示に移動

(リレーコマンドによって)ナビゲーションメソッド

public void onNav(string destination) 
{ 
    switch (destination) 
    { 
     case "study": 
      CurrentViewModel = new StudyViewModel(); 
      break; 
     case "capture": 
      CurrentViewModel = new ImageCaptureViewModel(); 
      break; 
     case "register": 
      CurrentViewModel = new RegisterViewModel(); 
      break; 
     case "editing": 
      CurrentViewModel = new ImageEditingViewModel(); 
      break; 
     default: 
      CurrentViewModel = new ImageCaptureViewModel(); 
      break; 
     } 
    } 
} 

私は、このメソッドがトリガーとCurrentViewModel値が更新されRegisterViewModelから呼び出しています。しかし、対応するビューはウィンドウに表示されません。

var mainModel = new MainWindowViewModel(); 
mainModel.OnNav("study"); 

ViewModelを更新していますが、Viewを更新していません。それを修正する方法。

+0

MainWindowViewModelの新しいインスタンスを作成し、そこにOnNavメソッドを呼び出します。私はこれがあなたのMainWindowViewがバインドされている同じインスタンスではないと思います – Tomtom

+0

@Tomtom私はこれを行う方法はありません。それを行う適切な方法は何ですか? –

答えて

0

WPFはUWPと少し違いがあります。既存のビューを更新せず、現在のビューを閉じて新しいウィンドウを開きます。あなたの場合: StudyViewModelはViewModelの名前で、Studyはビューの名前です。

public void onNav(string destination) 
{ 
    switch (destination) 
    { 
     case "study": 
      Study window = new Study(); 
      break; 
     ... 
     default: 
      ImageCapture window = new ImageCapture(); 
      break; 
    } 

    //Show the window 
    window.Show(); 
} 

これは、あなたの質問に関連していないが、あなたはthisを参照して、前に現在のウィンドウを閉じてMVVMの方法で新しいウィンドウを開く必要があります。

0

最後に、私はこの問題をシングルインスタンスで解決しました。 MainViewModelにオブジェクトを作成する代わりに、私は既に作成したViewModelのインスタンスを取得しています。同様に

var instance = MainWindowViewModel.GetInstance();

GetInstance()は、既に作成されたMainWindowViewModelのインスタンスを返します。

関連する問題