MVVM 환경에서 탐색을 구현하는 방법에 대해 this article부터 시작했습니다. 그런 다음 Messenger 클래스와 ViewModel간에 통신하는 것이 얼마나 유용 할지를 읽기 시작했습니다. 나는 메신저 클래스를 사용하여 동일한 탐색 개념을 구현하기 위해 밖으로 설정하고이 함께했다 :MVVM Light Messenger 클래스를 사용하는 올바른 방법입니까
MainViewModel : I 버튼에 콘텐츠를 제공하는 Name 속성이 해당 페이지 1 페이지 2 viewmodels에서
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;
}
}
. 그러면 Page1 버튼과 Page2 버튼이 생성됩니다.
두 번째 페이지가 Name 속성 문자열을 제외하고는 거의 동일하기 때문에 Page1ViewModel 만 표시합니다.
public class Page1ViewModel : ViewModelBase, IPageViewModel
{
public string Name
{
get { return "Page1"; }
}
}
은 여기에 기본적인 PageNavigationMessage 클래스 구현이 매우 잘 작동
public class PageNavigationMessage
{
public IPageViewModel CurrentViewModel { get; set; }
}
을하지만이 MVVM 라이트 툴킷의 메신저를 구현하는 올바른 방법이 있는지 궁금 해서요.
자세한 게시물과 예를 보려면 위에서 언급 한 Rachel Lim의 블로그 게시물에 감사드립니다.
모든 의견, 제안 등을 높이 평가합니다.