我想构建一个视图,它将包含一个区域的注入视图(两者都有自己的ViewModels)。
第一个视图将包含一些将在第二个视图上“执行”的动作控件(新建,保存,删除,加载按钮),其中包含一些字段控件(用于用户输入的TextBox)。
第一个视图(及其viewmodel)不能包含进入它的视图的真实(最终)类型,因为这种类型可能会有所不同(例如:客户字段,产品字段,用户字段)。
问题是:如何以正确的方式使用MVVM来实现这一目标?
答案 0 :(得分:2)
如果我理解你的问题,你有一个包含通用对象的视图,你想要一个基于通用对象的不同模板。
如果是这种情况,请使用ContentControl
和DataTemplates
<ContentControl Content="{Binding SomeGenericObject}">
<ContentControl.Resources>
<DataTemplate DataType="{x:Type local:CustomerViewModel}">
<local:CustomerView />
</DataTemplate>
<DataTemplate DataType="{x:Type local:ProductViewModel}">
<local:ProductView />
</DataTemplate>
<DataTemplate DataType="{x:Type local:OrderViewModel}">
<local:OrderView />
</DataTemplate>
</ContentControl.Resources>
</ContentControl>
至于处理ViewModel中的通用CRUD操作,请参阅my answer至your other question有关使用通用接口的信息。