假设我有一个TabControl
呈现Foo
对象集合的 a (每个都通过 a FooViewModel
)。在选项卡项列表的末尾,我想要一个不模拟任何内容的人造选项卡项,但它会创建一个新模型项并在单击时将其添加到集合中。
如果概念不清楚,一个真实的例子是 Internet Explorer 中的选项卡。它有n+1
选项卡项:n
具有页面内容,最后一个添加了新的“真实”选项卡。
在 MVVM 中对这种类型的交互进行建模的正确方法(如果有)是什么?我想到的选项是:
使其成为视图模型的一部分。在控件绑定到的集合的末尾
IEnumerable<FooViewModel> Foos
,添加一个“新项目”哨兵并将“我是真正的 foo 还是新的 foo 哨兵”逻辑构建到视图模型中。使其完全成为视图的一部分。重新模板(和/或子类)
TabControl
以呈现所有真实项目,然后还有一个按钮,该按钮调用命令以创建和插入新项目。
第一个选项一开始感觉不对,就像它会将视图细节泄漏到视图模型中('add a new' 似乎很可能Foo
是一个通用命令,并且某些视图可能根本不希望从选项卡列表中调用它)。但这确实有一定的意义,因为对于初始化过程,我已经需要为“半构造Foo
”建模,因此“尚不存在Foo
”的模型似乎并不遥远。
第二部分似乎需要做很多工作,也很容易搞砸(假设希望它看起来和感觉像其他选项卡)。
但我是 MVVM 的新手;这肯定经常出现。也许我完全错过了一些东西。传统的处理方式是什么?