MVVM 和嵌套视图模型

2024-04-03

我有一个简单的示例,其中我正在创建一个由列表框组成的视图,并且该列表框显示一堆项目。我想知道我是否在这里正确创建视图模型和模型类。在这种情况下使用正确的任何值,我知道这有点主观,但我当前的解决方案感觉不正确。这是一个简化版本。

ViewModel 和模型:

namespace Example
{
  public class ParentViewModel
  {
      public ParentViewModel()
      {
          // ... Create/Consume ChildViewModel * n
      }

      public List<ChildViewModel> ChildViewModels { get; set; }
  }

  public class ChildViewModel
  {
      public ChildViewModel()
      {
          // ... Create/Consume ChildModel
      }

      public ChildModel Model { get; set; }
  }

  public class ParentModel
  {
      public List<ChildModel> ChildModels { get; set; }

      public ParentModel()
      {
          // ... Create/Consume ChildModel * n;
      }
  }

  public class ChildModel
  {
      public ChildModel()
      {
          // ... Contains actual data.
      }

      public string Data { get; set; }
  }    
}

风景:

<Window x:Class="Example.View"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Example="clr-namespace:Example" Title="View" Height="300" Width="300"
    DataContext="{StaticResource TheViewModel}">
    <Window.Resources>
    <Example:ParentViewModel x:Key="TheViewModel" />
</Window.Resources>
<Grid>
    <ListBox Height="261" HorizontalAlignment="Left" Name="listBox1" VerticalAlignment="Top" Width="278" ItemsSource="{Binding ChildViewModels}"/>
</Grid>

在正确的代码中,列表框将使用数据模板来显示子视图模型。但正如您所看到的,我不确定如何实例化与子相关的对象。感觉就像 ParentViewModel 将引用 ParentModel 并基于 ParentModel 的 ChildModel 对象创建 ChildViewModel 对象。现在我已经说过,这听起来并不那么愚蠢,但我对你的想法很感兴趣。


你走在正确的轨道上。

父模型自然会包含子模型列表,例如有多个订单的客户。

When ParentViewModel由第三方创建并加载,它传递一个ParentModel。然后ParentViewModel will:

  1. 分配ParentModel到局部变量
  2. 创建一个ChildViewModel对于每个ChildModel通过通过ChildModel to the ChildViewModel构造函数
  3. 添加每一个ChildViewModels到一个列表

顺便说一句,你想要

public List<ChildViewModel> ChildViewModels { get; set; }

to be

public ObservableCollection<ChildViewModel> ChildViewModels { get; set; }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVVM 和嵌套视图模型 的相关文章

随机推荐

  • ERR_CONNECTION_RESET:上传大文件时连接被重置

    我遇到了一个神秘错误 大于 4MB 的文件生成了随机错误 后来我意识到这是由于http maxrequestlength http msdn microsoft com en us library system web configurat
  • git - 如何列出自特定日期以来未更改的所有文件?

    我正在尝试获取存储库中自特定日期以来未曾触及的文件列表 我试图利用git log before X months ago name only然后将该列表与git log after X months ago name only但我不确定是否
  • 按 T​​ab 键时我们如何选择 mat 选项?,它应该像 mat-autocomplete Angular 6 中的输入按钮一样工作

    按下 Tab 键时我们如何选择 mat 选项 它应该像 mat autocomplete Angular 6 中的输入按钮一样工作 在下面的 URL 中 当按 Enter 时它会工作 但每当我们按 Tab 按钮时 它应该选择突出显示的选项
  • N 开发人员预览版的正确项目配置是什么?

    该文档声称build gradle像这样的作品 android compileSdkVersion android N buildToolsVersion 24 0 0 defaultConfig minSdkVersion N targe
  • 绑定通用成员函数

    有时我需要将一些成员函数绑定到其调用对象 以相同的同构方式对待成员函数和非成员函数 例如 典型的回调示例 include
  • 获取插入符位置的元素节点(在 contentEditable 中)

    假设我有一些像这样的 HTML 代码 h1 Some heading text here h1 p Some text here p 现在插入符号 闪烁的光标 在 h1 元素 让我们用这个词来说 heading 如何使用 JavaScrip
  • 如何将 jqGrid (4.x) 配置为 TreeView

    我已经获取了演示代码并尝试修改它以满足我的需要 但不幸的是我无法获得所需的结果 树网格正在加载和 绑定 但在展开和折叠期间层次结构似乎存在问题 我希望它默认保持展开状态 看起来它正在对它应该的数据发出另一个 ajax 请求不要做 第一次调用
  • 如何使用 Twitter Bootstrap v3.0 构建两列流体布局

    由于 bootstrap 在 v3 0 中删除了 fluid css 类 因此我找不到构建两列流体布局的方法 目标是实现类似于旧文档中的流体布局示例的布局 http getbootstrap com 2 3 2 scaffolding ht
  • Silverlight 控件是否应该重新加载到页面上?

    几个月前 我开始自己开发 Silverlight 应用程序 我很快发现我的大多数控件无法获得预期的垃圾回收 我在 WinDBG 和 ANTS 内存分析器上苦苦挣扎了大约一周 然后在 Silverlight 论坛 http forums si
  • Visual Studio 2013 写入时缩进不起作用

    我有这样的代码 class Myclass 我现在想添加一些代码 例如一个方法 我在 之后直接按 Enter 键 希望得到这个 是光标所在的位置 class Myclass 不过我得到这个 class Myclass 如果我现在输入一个方法
  • 动态加载的JavaScript可以卸载吗?

    我正在编写一个具有静态外壳和动态内容部分的 Web 应用程序 当用户浏览系统时 动态内容部分有许多更新 当加载新的内容块时 它还可以选择加载另一个 JavaScript 文件 以良好管理的名义 我从 DOM 中删除了适用于旧内容块的脚本块
  • 如何在 C# 中创建 NVarchar(max) Sqlparameter? [复制]

    这个问题在这里已经有答案了 我有以下代码来使用存储过程并输入字符串参数 JobNumbers 来拉回 DataTable 该参数是动态创建的作业编号字符串 因此长度未知 using SqlConnection connection new
  • 使用季度数据格式化scale_x_连续轴

    我有一个统计数据集 分为两组 汇总为季度计数 这Date Qtr变量是通过 lubridate 从更大的数据集中导出的 数据框如下 dat structure list Group structure c 1L 1L 1L 1L 1L 1L
  • Rails 嵌套表单不更新嵌套模型

    我在尝试更新表单中的嵌套模型时遇到问题 我没有收到任何错误 但属性没有更新 我有以下模型 class Trip lt ActiveRecord Base has many segments accepts nested attributes
  • Moment.js 一周的第一天不正确

    这是我第一次使用 Moment js 我尝试检索一周第一天的日期 在欧洲这通常是星期一 无论我做什么 星期天都是一周的第一天 我尝试设置不同的语言 本地或全球 但无济于事 我使用 langs min js 文件moment js githu
  • 使用正则表达式拆分和替换 javascript 中的 unicode 单词

    需要将 unicode 单词列表放入 中的 unicode 字符串中 有我的代码 var txt One one one two two two two two tw tw u three tw f ur var re new RegExp
  • valueOf 总是覆盖 JavaScript 中的 toString 吗?

    对象的 toString 方法是否存在任何表达式隐含地调用重写其 valueOf 方法 在下面的示例中 始终隐式调用 valueOf 覆盖 toString 4 toString function return 4 valueOf func
  • 从fetch->promise->response获取数据

    我正在尝试将一些数据发布到服务器 但我不知道如何取回响应数据 我有以下代码 fetch url method POST headers Accept application json Content Type application jso
  • 如何使用 Apache Thrift 将图像从 Python 流式传输到 C++

    如何使用 Apache Thrift 流式传输文件 图像 我搜索了很多关于 Thrift 的信息 但没有找到任何与之相关的书面文档 为什么 Facebook 在没有文档的情况下开源这个项目 我建议的方法是设置您的服务以分块传送数据 如下所示
  • MVVM 和嵌套视图模型

    我有一个简单的示例 其中我正在创建一个由列表框组成的视图 并且该列表框显示一堆项目 我想知道我是否在这里正确创建视图模型和模型类 在这种情况下使用正确的任何值 我知道这有点主观 但我当前的解决方案感觉不正确 这是一个简化版本 ViewMod