我正在咬一大块,试图一下子学习MVVM,Unity和Prism(确认!)。到目前为止,它已经相当不错了,但我时不时遇到绊脚石。其中之一是:
我有一个定义主细节屏幕的VM。在详细信息部分中,我想在选项卡控件上划分多个DataGrids上的细节线。每个DataGrid都根据行中属性的值(“Section”)包含细节行的不同子集。基本上,我读了我的主实体,其中包含一系列细节实体。我认为我需要将此集合的不同视图暴露给View,以便DataGrids可以各自绑定到详细信息集合的正确过滤子集。 DataGrids必须是可编辑的。我已经尝试过将各种级别的CollectionViews暴露为DataGrids的ItemsSources,但似乎没有任何工作正常。另外,我认为将DataGrids分解为通用视图可能是最好的,因为它们都显示相同的信息(只是在不同的细节子集上),但我不知道如何做到这一点。有人可以帮忙吗?
谢谢, 丹尼斯
答案 0 :(得分:0)
如果我正确地理解你,你会有这样的事情:
public class MasterClass
{
public List<object> Details;
}
其中Details
是包含许多不同类型对象的List,并且您希望为每种类型的对象显示不同的View(DataGrid)?
我会使用TabControl
将ItemsSource
绑定到Details
属性,然后使用TabItem中的DataTrigger
来确定ItemTemplate(标签内容)的方式应该被吸引。
有些事情如下:
<TabControl ItemsSource="{Binding Details}">
<TabControl.Resources>
<Style TargetType="{x:Type TabItem}">
<Setter Property="Template" Value="{StaticResource DefaultTemplate}" />
<Style.Triggers>
<DataTrigger Property="{Binding ItemType}" Value="Address">
<Setter Property="Template" Value="{StaticResource AddressTemplate}" />
</DataTrigger>
<DataTrigger Property="{Binding ItemType}" Value="Phone">
<Setter Property="Template" Value="{StaticResource PhoneTemplate}" />
</DataTrigger>
</Style>
</TabControl.Resources>
</TabControl>
这只是一个粗略的例子,如果Detail.ItemType
是“地址”或“电话”,它将改变TabItem的模板。我过去也使用转换器来检查对象的类型,而不是需要在对象上使用Type属性,这样做效果更好。
如果您有兴趣,我写了一篇简短的文章here,其中显示了基于ViewModel数据切换视图或用户控件的几种方法