我正在尝试更多地了解WPF中的MVVM实现,目前需要一些使用ViewModels进行导航的指导.我正在关注Rachel博客中的 WPF导航示例,并且需要一种从其他ViewModel调用CommandViewModel命令的方法.
根据博客,从MainWindow切换视图非常清楚,但我想了解更多关于视图间导航的信息,即说我在HomeWindow上的Home,Product和Contact按钮以及View和ViewModel类,现在我想打开Contact主页视图中的某个按钮而不是MainWindow的页面.我已经在Home ViewModel中编写了一些代码来实现相同但我怀疑这是否是MVVM的最佳实践.有没有办法从HomeView.XAML实现相同的目标?
来自博客的代码片段 - ApplicationViewModel.cs
private ICommand _changePageCommand;
private IPageViewModel _currentPageViewModel;
private List<IPageViewModel> _pageViewModels;
public ApplicationViewModel()
{
// Add available pages in c'tor
PageViewModels.Add(new HomeViewModel(this));
PageViewModels.Add(new ProductsViewModel());
PageViewModels.Add(new ContactViewModel());
}
public ICommand ChangePageCommand
{
get
{
if (_changePageCommand == null)
_changePageCommand = new RelayCommand(
p => ChangeViewModel((IPageViewModel)p), p => p is IPageViewModel);
return _changePageCommand;
}
}
private void ChangeViewModel(IPageViewModel viewModel)
{
if (!PageViewModels.Contains(viewModel))
PageViewModels.Add(viewModel);
CurrentPageViewModel = PageViewModels.FirstOrDefault(vm => vm == viewModel);
}
Run Code Online (Sandbox Code Playgroud)
来自博客的Code Snippet - ApplicationView.xaml
<Window.Resources> …Run Code Online (Sandbox Code Playgroud)