我在MainWindowViewModel.cs中有一个方法,通过将viewname作为参数传递来导航视图。
导航方法(通过中继命令)
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但不更新View。如何解决它。
答案 0 :(得分: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();
}
这与您的问题无关,但您需要在以MVVM方式打开新窗口之前关闭当前窗口,请参阅http://jsfiddle.net/0vhvnjqp/。
答案 1 :(得分:0)
最后我使用单个实例修复了这个问题。而是创建对MainViewModel的对象,我得到已经创建的ViewModel的实例。喜欢
var instance = MainWindowViewModel.GetInstance();
GetInstance()将返回已经创建的MainWindowViewModel的实例。