I am learning MVVM now and I understand few things (more than but few are here..):
- Does every model potentially exposed (thru a VM) to the View is having a VM?
For example, if I have a Contact and Address entity and each contact has an Addresses (many) property, does it mean I have to create a ContactViewModel and an AddressViewModel etc.? - Do I have to redeclare all the properties of the Model again in the ViewModel (i.e. FirstName, LastName blah blah)? why not have a ViewModelBase and the ContactViewMode will be a subclass of ViewModelBase accessing the Entity’s properties itself? and if this is a bad idea that the View has access to the entity (please explain why), then why not have the ViewModelBase be a
DynamicObject(view the Dictionary example @ the link page), so I don’t have to redeclare all the properties and validation over and over in the two tiers (M & VM) – because really, the View is anyway accessing the ViewModel’s fields via reflection anyway. - I think MVVM was the hardest technology I’ve ever learned. it doesn’t have out-the-box support and there are to many frameworks and methods to achieve it, and in the other hand there is no arranged way to learn it (as MVC for instance), learning MVVM means browsing and surfing around trying to figure out what’s better. Bottom line, what I mean by this section is please go and vote to MSFT to add MVVM support in the BCL and generators for VMs and Vs according to the Ms.
Thanks
1/2) Like with most programming problems… It all depends.
It depends upon how you’ve linked together the ideas. You can re-expose the needed model properties in the view model if it fits your needs. Hide model proporties that you don’t want the user to interact with like a DB key. You can put the model validation logic in the model or the view model. It all depends on what works for you and your situation, which is why it is hard to directly answer the question.
I am using the ViewModelBase for functionality shared by ALL of the ViewModels. I’ve been using the base object to handle INotifyPropertyChanged code and little else.
3) Take a look at Karl Shifflett’s web site. Karl has a bunch of code you can look at. Stuff and BBQ Shack are working MVVM projects. He also has a complete MVVM training module here.
I’d post some links, but I’m limited to 2 links per post.