gpt4 book ai didi

c# - 在项目控件中公开 'add new item' 标记的最佳 MVVM 方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 11:21:51 24 4
gpt4 key购买 nike

假设我有一个 TabControl正在展示 Foo 的集合对象(每个对象都通过 FooViewModel )。在选项卡项列表的末尾,我想要一个不模拟任何内容但会创建一个新模型项并在单击时将其添加到集合中的人造选项卡项。

如果这个概念不清楚,一个真实的例子就是 Internet Explorer 中的选项卡。它有 n+1选项卡项目:n其中有页面内容,最后一个添加了新的“真实”标签。

在 MVVM 中对此类交互进行建模的正确方法(如果有)是什么?我想到的选项是:

  • 使其成为 View 模型的一部分。在 IEnumerable<FooViewModel> Foos 的最后控件绑定(bind)到的集合,添加一个“新项目”哨兵,并在 View 模型中构建“我是真正的 foo 还是一个新的 foo 哨兵”逻辑。

  • 让它完全成为 View 的一部分。重新模板(和/或子类)TabControl显示所有真实项目,然后还有一个按钮,该按钮调用创建和插入新项目的命令。

第一个选项一开始感觉不对,就像它把 View 细节泄露到 View 模型中(“添加一个新的Foo”似乎很可能是一个通用命令,有些 View 可能不希望从选项卡调用它列出所有)。但它确实有一定的意义,因为对于初始化过程,我已经需要为一个“半构造 Foo”建模。 ',所以一个'尚未存在的模型Foo ' 似乎并不遥远。

第二部分看起来工作量很大,而且很容易搞砸(假设希望它的外观和感觉与其他选项卡一样)。

但我是 MVVM 的新手;这肯定经常出现。也许我完全错过了一些东西。传统的处理方式是什么?

最佳答案

MVVM 模式的几个主要租户是:

  • 可测试性 - 通过使您的 View 尽可能简单,通过将逻辑移动到您的 View 模型中,您可以增加可通过单元测试测试的逻辑量。
  • 设计师支持 - 模拟 View 模型可用于为您的 View 提供设计时数据。

您的哪项建议最符合上述要求?我会说选项(1)。您可以编写单元测试以确保列表中的最后一项始终是“哨兵”项。

为了“在 View 模型中构建‘我是一个真正的 foo 还是一个新的 foo 哨兵’逻辑。”,您可以简单地使用类型化的 DataTemplates。

关于c# - 在项目控件中公开 'add new item' 标记的最佳 MVVM 方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10692445/

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