如何存储以前的向导页面?

时间:2012-02-06 06:21:11

标签: c# wpf mvvm

其实我正在尝试做一个精灵控制。我点击下一个按钮时动态加载3页。当我单击下一个按钮时,我需要存储页面详细信息,因此我创建了一个字典来存储usercontrol。是否有其他建议存储上一页的详细信息。

1 个答案:

答案 0 :(得分:2)

有很多方法可以满足您的要求。这就是我要做的,我认为这与MVVM设计模式非常一致。

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