.net 使用MVVM ViewModel-first体系结构的WPF导航和ViewModel实例化
我已经启动了一个WPF应用程序,希望遵循MVVM ViewModel优先的方法 对于导航,我看到了许多选项:.net 使用MVVM ViewModel-first体系结构的WPF导航和ViewModel实例化,.net,wpf,mvvm,navigation,.net,Wpf,Mvvm,Navigation,我已经启动了一个WPF应用程序,希望遵循MVVM ViewModel优先的方法 对于导航,我看到了许多选项: 使用ContentControl和UserControls(每个页面都是一个UserControl) 使用ContentPresenter和ResourceDictionarys(每个页面都是一个ResourceDictionary,或者简单地说:一个DataTemplate) 使用框架和页面s 第三个选项在我看来是“正确”的方法,因为ContentControl用于定义Xaml控件
- 使用
和ContentControl
s(每个页面都是一个UserControl)UserControl
- 使用
和ContentPresenter
s(每个页面都是一个ResourceDictionary,或者简单地说:一个DataTemplate)ResourceDictionary
- 使用
和框架
s页面
ContentControl
用于定义Xaml控件,而不是页面
我创建了一个基本的导航服务,其中包含对主窗口框架的引用
我现在的困惑在于如何在不破坏MVVM模式的情况下创建视图和视图模型
我想做一些类似ViewFactory的事情:
ViewFactory.Register(typeof(FirstViewModel), typeof(FirstPage));
ViewFactory.Register(typeof(SecondViewModel), typeof(SecondPage));
ViewFactory.Register(typeof(ThirdViewModel), typeof(ThirdPage));
然后在我的导航服务中,像(伪代码)一样导航:
但在本例中,viewModel在调用navigate方法的类中实例化(该位置将是另一个viewModel),如下所示:
- 如何摆脱此ViewModel实例化?我不想让我的viewModel负责创建其他viewModel,这听起来不对吗
- 此外,此ViewFactory强制我为每个视图创建一个viewModel
DataContext="{Binding FirstViewModel, Source={StaticResource ViewModelLocator}}"
但这不再是ViewModel的第一个视图,我的视图强烈附加到单个ViewModel
简而言之:
- 在ViewModel first方法中,如何使用框架和页面在不同视图之间导航,而不用viewModels“硬代码”彼此实例化
如果没有框架和页面,请随意提出另一种导航机制。如果这似乎很长,您可以直接阅读“简言之”问题
//this code is defined inside my FirstViewModel
var vm = new SecondViewModel(args);
navigationService.Navigate(SecondViewModel);
DataContext="{Binding FirstViewModel, Source={StaticResource ViewModelLocator}}"