根据您对对话框的描述及其工作原理,我将拥有一个ViewModel控制整个“向导”的对话框。
这DialogWizardViewModel将包含:
ObservableCollection<SomeModel> Data
ObservableCollection<ViewModelBase> DialogWizardViews
ViewModelBase SelectedView
ICommand NextCommand
ICommand BackCommand
您DialogView将包含类似于ContentControl绑定到的内容SelectedView,并且您的Next/Back命令将简单地切换SelectedView到中的下一个或上一个视图DialogWizardViews
例如,
<DockPanel>
<StackPanel DockPanel.Dock="Bottom"
Orientation="Horizontal"
HorizontalAlignment="Center">
<Button Command="{Binding BackCommand}" Content="Back" />
<Button Command="{Binding NextCommand}" Content="Next" />
</StackPanel>
<ContentControl Content="{Binding SelectedView}" />
</DockPanel>
Data可以在您第一次创建时在您的子 ViewModel 中设置,或者根据您的喜好DialogWizardViews切换时。SelectedView
DialogWizardViews = new ObservableCollection<ViewModelBase>()
{
new DialogViewModel1(Data),
new DialogViewModel2(),
new DialogViewModel3(Data),
new DialogViewModel4(Data),
new DialogViewModel5(Data),
new DialogViewModel6()
};
SelectedView = DialogWizardViews.FirstOrDefault();
请记住,使用 MVVM,您ViewModels 就是您的应用程序,而Views只是为用户提供一个用户友好的界面来与 ViewModel 进行交互。理想情况下,您应该能够从测试脚本或控制台应用程序之类的东西运行整个应用程序,而View根本不需要。
如果您需要传递一些东西,它应该由应用程序层次结构中的某个父对象处理,或者使用某种通信系统,例如 PrismEventAggregator或 MVVM Light 的Messenger。您不需要使用整个框架来使用这些对象 - 您只需挑选出您感兴趣的部分即可。