导航到WPF中的视图

时间:2016-11-17 09:59:20

标签: wpf mvvm data-binding wpf-controls

我在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。如何解决它。

2 个答案:

答案 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的实例。