I find I usually end up wrapping most of my Models in a ViewModel
if they're going to be used extensively in the View
, as it gives me the most flexibility.
If a Model
is only used as the component of another Model
, and doesn't itself have any particularly interesting display properties/logic, I'm usually happy to expose its properties via other ViewModels
. It's usually a judgment call based on what you'll be doing with your models.
In your case it sounds like you may be interrogating/displaying a Person
quite frequently, so you may have something like the following:

If that's the case, I'd be inclined, as galenus
suggested, to wrap each Person
in a ViewModel
and hold a list of ObservableCollection<PersonViewModel>
on whatever ViewModel
you're composing.
That way, if you need any View
specific fields for displaying a Person
(or additional logic), you're free to stick them on the PersonViewModel
, without polluting the Person
Model.
If however, all you're doing is displaying a list of Persons
in a small place in your application, I probably wouldn't bother wrapping them.
I find MVVM
is often a balancing act, eventually you get a feel for what is likely to require a ViewModel
. Personally, I probably favour a ViewModel
wrapper more than I need to, because I've often found that later in development, I require the additional flexibility.