Bol*_*Bob 6 .net c# silverlight wpf mvvm
想象一下,有一个View将显示数据收集的多个步骤.根据上一步骤中的决定,以下步骤的顺序或具体实例将有所不同.
遵循MVVM纯粹最佳实践,我想在外部ViewModel中有一个ViewModel列表是这样做的,并让外部View绑定自定义选项卡控件(或类似).
这让我想到了两个方面,我不清楚:
第一点:"哪个先来?"
外部View/ViewModel组合可能是"View First".也就是说,视图要么接收ViewModel,要么实例化一个ViewModel.
但是当涉及到这个外部ViewModel中的ViewModel列表时:它们各自的Views来自哪里?哪个实体负责为每个实体选择最佳视图?
我不太喜欢像这样在"View First"和"ViewModel First"之间交替使用.
第二点:ViewModels之间的通信
当其中一个内部ViewModel步骤完成时,例如单击"保存"或"下一步"按钮,应该向该内部ViewModel触发一个命令,然后显示下一个.
这需要外部ViewModel:
能够拿起发送到内部ViewModel的Save命令
能够访问内部ViewModel中的数据.
人们通常会怎么做?将内部和外部ViewModel与事件绑定在一起被认为是一种不好的做法吗?
1)在我的理解中MVVM
总是说ViewModels first
并且Views
必须已经实例化ViewModels
.适用于所有内/外ViewModel.
他们各自的观点来自哪里?哪个实体负责为每个实体选择最佳视图?
在WPF中,我更喜欢使用DataTemplating
这个原因.在您app.xaml
或DataTemplates
每个应用程序范围的资源文件中,您定义特定于每个ViewModel.在Views
你把一个绑定到ViewModel ContentPresenter
和DataTemplating 绑定到那里.样品:
App.xaml:
<Application.Resources>
<DataTemplate DataType="{x:Type local:OuterViewModel}">
<local:OuterView />
</DataTemplate>
<DataTemplate DataType="{x:Type local:InnerViewModel}">
<local:InnerView />
</DataTemplate>
<Application.Resources>
Run Code Online (Sandbox Code Playgroud)
OuterView.xaml:
<Grid>
<!-- Assuming OuterViewModel has a property named 'InnerViewModel' -->
<ContentPresenter Content="{Binding InnerViewModel}" />
</Grid>
Run Code Online (Sandbox Code Playgroud)
2)
能够拿起发送到内部ViewModel的Save命令
我把SaveCommand
上OuterViewModel
能够访问内部ViewModel中的数据.
我会在OuterViewModel中引用每个内部ViewModel
归档时间: |
|
查看次数: |
1195 次 |
最近记录: |