1
我从this article开始了解如何在MVVM环境中实现导航。然后我开始阅读有关Messenger类的内容,以及ViewModels之间如何交流。我阐述了使用信使类来实现相同的导航概念,以及与此想出了:这是使用MVVM Light Messenger类的正确方法
MainViewModel:
public sealed class MainViewModel : ViewModelBase
{
public MainViewModel()
{
PageViewModels.Add(new Page1ViewModel());
PageViewModels.Add(new Page2ViewModel());
Messenger.Default.Register<PageNavigationMessage>(this, (pageViewModel) =>
{
switch (pageViewModel.CurrentViewModel.Name)
{
case "Page1":
CurrentPageViewModel = PageViewModels[0];
break;
case "Page2":
CurrentPageViewModel = PageViewModels[1];
break;
}
});
}
private List<IPageViewModel> _pageViewModels;
public List<IPageViewModel> PageViewModels
{
get
{
if (_pageViewModels == null)
_pageViewModels = new List<IPageViewModel>();
return _pageViewModels;
}
}
private IPageViewModel _currentPageViewModel;
public IPageViewModel CurrentPageViewModel
{
get { return _currentPageViewModel; }
set
{
if (_currentPageViewModel != value)
{
_currentPageViewModel = value;
RaisePropertyChanged("CurrentPageViewModel");
}
}
}
private ICommand _changePageCommand;
public ICommand ChangePageCommand
{
get
{
if (_changePageCommand == null)
{
_changePageCommand =
new RelayCommand<IPageViewModel>(pn => Messenger.Default.Send(new PageNavigationMessage{CurrentViewModel = pn}));
}
return _changePageCommand;
}
}
在相应的第一页和第二页的ViewModels我,让内容给该按钮的名称属性。所以这会产生Page1按钮和Page2按钮。
我将仅显示Page1ViewModel,因为第二页与Name属性字符串几乎完全相同。
public class Page1ViewModel : ViewModelBase, IPageViewModel
{
public string Name
{
get { return "Page1"; }
}
}
在这里我实现了一个基本的PageNavigationMessage类:
public class PageNavigationMessage
{
public IPageViewModel CurrentViewModel { get; set; }
}
这工作得很好,但我想知道,这是落实在MVVM光工具包信使类的正确方法。
我想感谢上面引用的Rachel Lim的博客文章,详细的文章和示例。
任何意见,建议等,非常感谢。