在ViewModel中公开属性的正确方法

时间:2014-11-02 12:35:17

标签: c# mvvm viewmodel

如果我有一个 PersonWindow 及其相应的 PersonWindowViewModel ,并且考虑到此视图将用于显示 Person 的集合,那该怎么办?我实现了公开的集合吗?

作为ObservableCollection<Person>ObservableCollection<PersonViewModel>

简而言之,我应该为每个要在View中表示的实体创建一个ViewModel(每个视图一个+每个模型类一个)?

1 个答案:

答案 0 :(得分:3)

我发现,如果我的大多数模型在ViewModel中被广泛使用,我通常会将其包裹起来,因为它会给我最大的灵活性。

如果View仅用作另一个Model的组件,并且本身没有任何特别有趣的显示属性/逻辑,我通常很乐意将其公开通过其他Model的属性。它通常是基于您对模特所做的事情的判断。

在您的情况下,您可能会经常询问/显示ViewModels,因此您可能会遇到以下情况:

Mockup

如果属于这种情况,我会倾向于Person建议将galenus包裹在Person并保留{{1}列表1}}关于你正在撰写的ViewModel

这样,如果您需要任何ObservableCollection<PersonViewModel>特定字段来显示ViewModel(或其他逻辑),您可以自由地将它们贴在View上,而不会造成污染Person模型。

但是,如果你正在做的只是在你的应用程序的一个小地方显示PersonViewModel的列表,我可能不会打扰它们。

我发现Person通常是一种平衡行为,最终你会感觉到可能需要Persons。就个人而言,我可能更喜欢MVVM包装,而不是我需要的,因为我经常发现在开发后期,我需要额外的灵活性。