Wpf 包含另一个相对视图的视图
我想构建一个视图,它将包含一个注入到区域中的视图(两者都有自己的视图模型) 第一个视图将包含一些操作控件(新建、保存、删除、加载按钮),这些控件将在第二个视图上“执行”,第二个视图将包含一些字段控件(用于用户输入的文本框) 第一个视图(及其viewmodel)不能是其中视图的真实(最终)类型,因为此类型可能会有所不同(例如:客户字段、产品字段、用户字段)Wpf 包含另一个相对视图的视图,wpf,mvvm,prism,Wpf,Mvvm,Prism,我想构建一个视图,它将包含一个注入到区域中的视图(两者都有自己的视图模型) 第一个视图将包含一些操作控件(新建、保存、删除、加载按钮),这些控件将在第二个视图上“执行”,第二个视图将包含一些字段控件(用于用户输入的文本框) 第一个视图(及其viewmodel)不能是其中视图的真实(最终)类型,因为此类型可能会有所不同(例如:客户字段、产品字段、用户字段) 问题是:如何以正确的方式使用MVVM来实现这一点?如果我正确理解您的问题,您有一个包含泛型对象的视图,并且您希望基于泛型对象的内容使用不同的模
问题是:如何以正确的方式使用MVVM来实现这一点?如果我正确理解您的问题,您有一个包含泛型对象的视图,并且您希望基于泛型对象的内容使用不同的模板 如果是这种情况,请使用
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操作,请参见至关于使用通用界面。Hi omnipresent Rachel。我认为(再次)你给了我一个完美的答案。现在,我必须对这个功能进行一些“拍摄”。我很快就回来。好的。。。有一个问题。我使用的是Prism,“母版页”视图必须由shell项目(或公共或默认模块)定义,所有内部视图都将创建到各自的模块中。因此,“母版页”视图无法了解有关内部视图的任何信息。你能理解吗?我能做什么?谢谢。@DiegoStiehl我倾向于使用
ConentControls
,只需将内容
绑定到所需的任何ViewModel。然后使用DataTemplates
告诉WPF如何绘制每个ViewModel。如果您感兴趣,我写了一些关于MVVM导航的文章,其中有一个使用ContentControls
和DataTemplates
@DiegoStiehl更改当前内容的示例,它在Prism中运行良好-我以前做过。使每个模块将其数据模板存储在ResourceDictionary中,并在运行时将所有资源字典加载到应用程序的合并字典中。至于您的另一个问题,请将所有泛型类和接口放在一个公共库中,该库可供所有其他模块访问。您的主视图模型不需要知道使用它的对象的确切类型,只需要知道它从特定接口继承。@DiegoStiehl通常我在我的公共项目中创建一个接口,并在我的主项目中实现它。加载模块时,模块使用此公共接口将其资源添加到应用程序中。在中国也有类似的例子