所以我有一个WPF MVVM应用程序(作为一个例子)在不同类型的sql表中存储不同类型的客户。
EntityFramework数据库中有一个基本类型Customer
,其中包含一个名为Type
的列。
根据Customer.Type
,用户应该能够输入不同类型的信息。
所以Customer.Type可以存储 Customer1 , Customer2 等等......根据这种类型,信息存储在另一个数据库表中。
客户群信息(名称,邮政地址)始终属于Customers
表,而如果客户的类型为 Customer1 ,则WPF UI应显示另外一个公开控件的UserControl填写表Customer1
的信息。
WPF MVVM中是否有一种干净的方法来执行此操作?
答案 0 :(得分:2)
是的,你可以使用数据模板,比如我将在WPF DataTemplate Binding depending on the type of a property解释或阅读类似的方法
您可以为每个Type实现不同的ViewModel和Views,即 Customer1ViewModel - Customer1View,Customer2ViewModel - Customer2View ...
然后,根据您的类型,为该类型创建适当的ViewModel。
在要输入数据的UI中添加数据模板:
<UserControl>
<UserControl.Resources>
<DataTemplate DataType="{x:Type viewmodels:Customer1ViewModel}">
<views:Customer1View/>
</DataTemplate>
<DataTemplate DataType="{x:Type viewmodels:Customer2ViewModel}">
<views:Customer2View/>
</DataTemplate>
</UserControl.Resources>
<Grid>
<!--Main content-->
<ContentControl Content="{Binding CustomerViewModel}"/>
</Grid>
</UserControl>
因此,如果绑定属性CustomerViewModel中的实例是Customer1ViewModel,那么它将显示Customer1View用户控件。