tab*_*7vn 3 wpf mvvm contentcontrol
我正在构建一个MVVM WPF应用程序,其中有一个向导,在父视图(V)中加载了多个子视图,该视图使用ViewModel(VM)作为其数据上下文.其中一个MVVM模式原则指出VM不应该知道绑定它的V. 在这种情况下,VM确实不知道V,但是,VM(1)管理由不同子视图(即不同步骤)组成的列表属性,以及(2)具有另一个名为CurrentView动态分配元素的属性在列表中.在V中CurrentView受到约束ContentControl
我的问题是:
父视图模型应该具有子视图模型的知识,而不是子视图.同样,父视图而不是视图模型应该负责切换子视图.
以下是你如何做到这一点......
在您的视图中,创建一些数据模板,如下所示:
<Window.Resources>
<DataTemplate DataType="{x:Type vm:WizardScreen1ViewModel}">
<v:WizardScreen1 />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:WizardScreen2ViewModel}">
<v:WizardScreen2 />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:WizardScreen3ViewModel}">
<v:WizardScreen3 />
</DataTemplate>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)
然后,在您显示当前向导屏幕的视图部分中,放置一个ContentControl,如下所示:
<ContentControl Content="{Binding CurrentWizardScreenViewModel}" />
Run Code Online (Sandbox Code Playgroud)
在父视图模型中,您将需要一个在更改时CurrentWizardScreenViewModel触发PropertyChanged事件的属性.
然后,您需要向导的下一个/上一个按钮绑定到父视图模型中的命令,这些命令CurrentWizardScreenViewModel将设置为下一个/上一个屏幕的视图模型.
如果这样做,由于数据绑定的神奇之处,视图将自动关闭切换向导屏幕视图.
| 归档时间: |
|
| 查看次数: |
1955 次 |
| 最近记录: |