【发布时间】:2016-05-07 00:54:10
【问题描述】:
我目前正在尝试在我的 WPF 应用程序中使用 MVVM Light Toolkit 的 Messenger 进行导航(也使用 Locator 和 SimpleIoC)。
我的 MainWindow 有一个带有简单绑定的 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"));
为了告诉它应该显示哪个视图,我像这样在 App.xml 中设置它们..
<DataTemplate DataType="{x:Type vm:LoginViewModel}">
<view:LoginView />
</DataTemplate>
是的,我也使用 RegisterViewModel 这样做了。但是当单击 Button 时,它会通过 SwitchCase 设置 _currentPageViewModel,但 ContentControl 不会更新视图。..
我没有找到任何有用的方法(主要是因为愚蠢,对吧?)。 我错过了什么或做错了什么?
谢谢!
【问题讨论】:
标签: c# wpf xaml mvvm mvvm-light