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

标签 mvvm collections view

我在这里咬了一大块,试图同时学习 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/

相关文章:

java8从对象基本条件列表中删除对象

json - 检查 play.api.libs.json.Json 中是否存在 key

Android:如何处理长文本

c# - 为什么 ListView 在 MVVM 中不更新

c# - wpf datagrid 根据选定的值生成行

wpf - 什么是 ViewModelLocator 以及它与 DataTemplate 相比有何优缺点?

java - 集合排序列表包含 2 个对象

ruby-on-rails - Rails 3 - HAML block 传递给在原始上下文中呈现的部分而不是部分

c# - MVVM中的模型

WPF MVVM 将控件绑定(bind)到在 View 模型中设置的变量