我目前正在尝试在我的WPF应用程序中使用MVVM Light Toolkit(也使用定位器和SimpleIoC)的Messenger进行导航。
我的主窗口有一个带有简单绑定的ContentControl。。
<ContentControl Content="{Binding CurrentPageViewModel}"/>
..在带有Messenger的MainViewModel中
private ViewModelBase _currentPageViewModel;
private readonly LoginViewModel _loginViewModel;
private readonly RegisterViewModel _registerViewModel;
public MainViewModel()
{
RegisterMessenger();
_loginViewModel = new LoginViewModel();
_registerViewModel = new RegisterViewModel();
_currentPageViewModel = _loginViewModel;
}
public ViewModelBase CurrentPageViewModel
{
get { return _currentPageViewModel; }
set { Set(ref _currentPageViewModel, value); }
}
public void RegisterMessenger()
{
Messenger.Default.Register<NotificationMessage>(this, (message) =>
{
MessageBox.Show(message.Notification);
// Checks the actual content of the message.
switch (message.Notification)
{
case "GoToLoginPage":
_currentPageViewModel = _loginViewModel;
break;
case "GoToRegisterPage":
_currentPageViewModel = _registerViewModel;
break;
}
});
}
例如,我用ICommand绑定了一个按钮,它向Messenger发送一个字符串以切换CurrentPageViewModel。。
Messenger.Default.Send(new NotificationMessage("GoToRegisterPage"));
为了告诉它应该显示哪个视图,我在应用程序中设置了它们。xml,如下图所示。。
<DataTemplate DataType="{x:Type vm:LoginViewModel}">
<view:LoginView />
</DataTemplate>
是的,我对RegisterViewModel也这样做了。。但是当单击按钮时,它会通过SwitchCase设置_currentPageViewModel,但ContentControl不会更新视图。。
我找不到任何有用的东西(因为大部分都是愚蠢的,对吧?)。
我错过了什么或做错了什么?
谢谢