首先,我会说没有必要继承,ObservableCollection<T>
除非你向它添加我很少,如果有的话,实际上需要做的功能。
在大多数情况下,我创建 ViewModel 类型的属性,ObservableCollection<T>
然后在加载数据时从模型中填充它们。这样做的好处是 Model 不需要使用ObservableCollection<T>
(它可以是 any IEnumerable<T>
),这意味着稍后当我(几乎不可避免地)想要将从 Model 返回的任何内容包装在另一个特定于实例的视图模型中时只需要更改我现有的视图模型类。
一旦你在你的视图模型上有一个属性,你可以简单地将你绑定CollectionViewSource
到那个属性,它会从那里做所有事情。值得注意的是,CollectionViewSource
它实际上并不关心属性的类型,因此您可以将您的集合作为一个ICollection<T>
,IEnumerable<T>
或者(我相信)甚至作为一个公开给视图,object
并且CollectionViewSource
仍然会像公开一样对待它作为一个ObservableCollection<T>
.
对不起,有点漫不经心的回答。简洁的版本是“视情况而定”,但在大多数情况下,我倾向于遵循这种通用方法。