gpt4 book ai didi

MVVM ViewModel 暴露同一集合的多个 View

转载 作者:行者123 更新时间:2023-12-03 10:50:11 25 4
gpt4 key购买 nike

我在这里咬了一大块,试图同时学习 MVVM、Unity 和 Prism(ack!)。到目前为止,一切都还算顺利,但我时不时会遇到绊脚石。其中之一是:

我有一个定义主从屏幕的虚拟机。在详细信息部分,我想在选项卡控件上跨多个 DataGrid 划分详细信息行。每个 DataGrid 都包含基于行(“Section”)中的属性值的详细信息行的不同子集。因此,基本上,我阅读了包含详细实体集合的主实体。而且我认为我需要将此集合的不同 View 公开给 View ,以便 DataGrid 可以各自绑定(bind)到详细信息集合的正确过滤子集。 DataGrids 必须是可编辑的。我已经尝试将各种级别的 CollectionViews 作为 DataGrids 的 ItemsSources 公开,但似乎没有任何工作正常。另外,我认为最好将 DataGrids 分解为通用 View ,因为它们都显示相同的信息(只是在不同的细节子集上),但我不知道该怎么做。任何人都可以帮忙吗?

谢谢,
丹尼斯

最佳答案

如果我正确理解你,你有这样的事情:

public class MasterClass
{
public List<object> Details;
}

在哪里 Details是一个包含许多不同类型对象的List,并且您想为每种类型的对象显示不同的 View (DataGrid)?

我会使用 TabControl它是 ItemsSource绑定(bind)到 Details属性,然后使用 DataTrigger在 TabItem 中确定应如何绘制 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 的模板。是“地址”或“电话”。我过去也使用 Converter 来检查对象的类型,而不是需要在对象上具有 Type 属性,这样效果更好。

如果你有兴趣,我写了一篇简短的文章 here显示了几种基于 ViewModel 数据切换 View 或用户控件的方法

关于MVVM ViewModel 暴露同一集合的多个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6944327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com