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的博客文章,詳細的文章和示例。
任何意見,建議等,非常感謝。