我想在我的 Silverlight MVVM 应用程序中创建一个“向导”。该向导应包含多个步骤,您可以使用“下一个”和“上一个”在这些步骤之间导航。
我面临的问题是视图和视图模型之间的关系。
我希望向导本身有一个视图和视图模型。我的直觉告诉我,向导中的每个步骤都应该有一个视图/视图模型对。
在一个视图模型包含多个其他视图模型并且该视图实际上由几个较小的视图组成的情况下,维护此类关系的好方法是什么?
有什么我可以使用的模式或实践吗?
我知道这个问题可能是主观的,但是给我一个粗略的方法,我会给你一个答案!
我建议主向导 viewModel 它有一个集合steps
查看模型并处理它们之间的导航。导航时应调用验证方法step
视图模型:
向导虚拟机:
public class WizardVM
{
// this commands should support CanExecute
public ICommand GotoNextCommand { get; private set; } // should open next step VM
public ICommand GotoBackCommand { get; private set; } // should open previous step VM
// this prop should be set by 'GotoNext', 'GotoBack' commands
public object CurrentStep { get; private set; }
// probably internally you will have a list of all steps:
private ICollection<object> _stepViewModels = ...;
}
向导视图:
<StackPanel>
<ContentPresenter Content="{Binding CurrentStep}">
<StackPanel Orientation="Horizontal">
<Button Command="{Binding GotoBackCommand}">Back</Button>
<Button Command="{Binding GotoNextCommand}">Next</Button>
</StackPanel>
</StackPanel>
UPDATE:
视图可以通过以下方式与 ViewModel 耦合Datatemplating
。例如将其添加到资源中App.Xaml
:
<DataTemplate DataType="{x:Type local:Step1ViewModel}">
<Step1View />
</DateTemplate>
<DataTemplate DataType="{x:Type local:Step2ViewModel}">
<Step2View />
</DateTemplate>
你的 viewModel 应该对视图一无所知。代表着WizardVM
应该
仅公开其他 viewModel,但不公开视图。这是 MVVM 的经验法则。
UPDATE2糟糕,我忘了 Silverlight 还没有 DataTemplate。在 silverlight 中,我仍然会公开 ViewModel,但将它们绑定到ContentPresenters
使用转换器将视图模型转换为相应的视图。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)