2016-11-17 64 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的实例。