Wpf 包含另一个相对视图的视图

Wpf 包含另一个相对视图的视图,wpf,mvvm,prism,Wpf,Mvvm,Prism,我想构建一个视图,它将包含一个注入到区域中的视图(两者都有自己的视图模型) 第一个视图将包含一些操作控件(新建、保存、删除、加载按钮),这些控件将在第二个视图上“执行”,第二个视图将包含一些字段控件(用于用户输入的文本框) 第一个视图(及其viewmodel)不能是其中视图的真实(最终)类型,因为此类型可能会有所不同(例如:客户字段、产品字段、用户字段) 问题是:如何以正确的方式使用MVVM来实现这一点?如果我正确理解您的问题,您有一个包含泛型对象的视图,并且您希望基于泛型对象的内容使用不同的模

我想构建一个视图,它将包含一个注入到区域中的视图(两者都有自己的视图模型)

第一个视图将包含一些操作控件(新建、保存、删除、加载按钮),这些控件将在第二个视图上“执行”,第二个视图将包含一些字段控件(用于用户输入的文本框)

第一个视图(及其viewmodel)不能是其中视图的真实(最终)类型,因为此类型可能会有所不同(例如:客户字段、产品字段、用户字段)


问题是:如何以正确的方式使用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通常我在我的公共项目中创建一个接口,并在我的主项目中实现它。加载模块时,模块使用此公共接口将其资源添加到应用程序中。在中国也有类似的例子