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