有很多方法可以满足您的要求。这就是我要做的,我认为这与MVVM设计模式非常一致。
- 定义一个ViewModel类,其中包含所有您要收集的变量(无论页面分区如何。
- 添加名为“currentPage”的公共属性。
- 定义向导的框架。可能是< Window>元素,带有StackPanel。窗口顶部有一个标题,“prev”和“next”按钮底部有一个区域(如果你愿意,可以“完成”)。
- 在StackPanel的主要区域中放置一个并将其DataContext绑定到ViewModel
- 在ViewModel中创建Next和Pref命令(使用Prism DelegateCommand,或实现自己的源自ICommand的轻量级版本。
6 /另外,使用适当的CanExecute逻辑将“完成”按钮绑定到命令(你收集了足够的数据吗?)。
- Next和Prev'CanExectue'逻辑将查看currentPage。例如当currentPage为0时,Prev命令CanExecute将返回false。
- 您将拥有3个不同的数据模板,每个页面一个。每个数据模板将显示您要在该页面上收集的不同属性子集。将UI控件绑定到ViewModel的属性,并以两种方式绑定模式。
- 从INotifyPropertyChanged派生您的ViewModel,并让所有设置者触发相应的通知。至少需要currentPage属性,但是为了完成解决方案,请对所有属性执行此操作。
- 在Next和Prev命令中,Execute方法将修改currentPage属性(Setter应该触发通知)。视图将自动更新。
- 对于主区域ItemControl,实现从DataTemplateSelector派生的WizardTemplateSelector。将其定义为资源,并使用{StaticResource}绑定分配ItemControl.ContentTemplateSelector。
- 如果您愿意,您还可以在窗口左侧有一个List控件,其中Selected Item Index绑定到当前页面。
醇>
编辑(解释器):基本思想是拥有一个ViewModel,可以在几个不同的数据模板中查看,取决于当前页面。