2016-11-17 66 views
1

我在MainWindowViewModel.cs中有一個方法來通過傳遞viewname作爲參數來導航視圖。導航到WPF中查看

導航法(relay命令)

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; 
     } 
    } 
} 

當我從RegisterViewModel調用此方法被觸發,CurrentViewModel值更新。但相應的視圖不顯示在窗口中。

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

它更新ViewModel但不更新視圖。如何解決它。

+0

您正在創建一個MainWindowViewModel的新實例並在那裏調用OnNav-Method。我想這是不一樣的實例,因爲你的MainWindowView綁定到 – Tomtom

+0

@Tomtom我不知道如何做到這一點。什麼是正確的方法來做到這一點? –

回答

0

WPF與UWP有一點區別。您不更新現有視圖,關閉當前視圖並打開新窗口。在你的情況下: 考慮StudyViewModel是ViewModel的名稱,而Study是View的名稱。

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(); 
} 

這不涉及到你的問題,但你需要之前關閉當前窗口MVVM方式打開一個新的窗口,看到this

0

最後,我已經使用單個實例解決了這個問題。相反,創建對象到MainViewModel,我得到已經創建的ViewModel的實例。像

var instance = MainWindowViewModel.GetInstance();

GetInstance()將返回已經創建的MainWindowViewModel的實例。