我需要一个适用的视图模型列表,并且正在讨论是否尝试创建复合集合或创建它们继承的共享接口。一种方法是首选吗?
我假设复合集合维护一个独立于底层集合的项目的索引,以便可以拥有 复合收藏品# 0(项目类型A)1(项目类型B)2(项目类型A)3(项目类型A),并维护列表中的排序。
两种方法之间是否存在重大差异?
我想我会更详细地解释一下我通常做的事情。通常我需要一个selectedItems列表,我可以创建一个Object类型的ObservableCollection,然后让treeview根据数据类型应用不同的datatemplates。但是,我认为有一些类型安全更好,并且知道不仅在集合中抛出任何对象,所以我实现了一个接口。但是,有时我感到很荒谬,因为实现接口的对象之间没有足够的共享属性,所以我觉得尝试创建共享接口是荒谬的。
实现具有每种可能类型的单独列表的复合集合可能更有意义。
答案 0 :(得分:2)
根据msdn(在CompositeCollection上):
允许多个集合和项目显示为单个列表。
除非你需要这些(我认为不是这样),你应该去ObservableCollection<T>
。由于它是通用的,它可以避免不必要的,容易出错的铸件。当与值类型一起使用时(即,没有装箱/拆箱),不再需要投射其元素也可以提高性能。
此外,很难判断所有视图模型是否实现共享接口是一个不错的选择,而不了解更多有关视图模型的信息。问问自己:这有意义吗?他们之间真的有关系吗?该集合的客户端是否能够平等地处理该接口的实例,无论其真实类型如何?