When I started to read it I identified myself as one of those developers that map all the view model properties back to the model.
I will remember you how it started:
"During the use of the MVVM pattern, we noticed that lots and lots of developers have a model, and map the values of the model to all properties of the view model. When the UI closes, the developers map all the properties back to the model. All this redundant code is not necessary when using the view models of Catel." More...
This only feature makes that my interest about
Catel grown until I became one of the
members of the development team. But this is part of the other history.
Let’s go back to the
Catel feature again. If you don’t remember how it works, here is a summary.
Basically if you want to create a model the only thing that you have to do is decorate a view model property with the
ModelAttribute. So if you want to expose the model property as view model one, and don’t write the mapping back code you must decorate the exposed property with the
ViewModelToModelAttribute just like this:
///
/// The person view model.
///
public class PersonViewModel : ViewModelBase
{
#region Static Fields
/// Register the FirstName property so it is known in the class.
public static readonly PropertyData FirstNameProperty = RegisterProperty("FirstName", typeof(string));
/// Register the Person property so it is known in the class.
public static readonly PropertyData PersonProperty = RegisterProperty("Person", typeof(Person));
#endregion
#region Public Properties
///
/// Gets or sets the first name.
///
[ViewModelToModel("Person")]
public string FirstName
{
get { return GetValue<string>(FirstNameProperty); }
set { SetValue(FirstNameProperty, value); }
}
///
/// Gets or sets the person.
///
[Model]
public Person Person
{
get { return GetValue<Person>(PersonProperty); }
set { SetValue(PersonProperty, value); }
}
#endregion
}
This example will automatically create a mapping between Person.FirstName and PersonViewModel.FirstName.
This feature is amazing and
Catel distributes some code snippets to accelerate writing such code:
- vm - declare a view model
- vmpropmodel - declare a property as model on a view model
- vmpropviewmodeltomodel - declare a property as a pass-through property on a view model
But could you imagine to yourself writing this code (and more) as fast as is possible (near to the speed of light). Don't you believe me?
Watch the movie, and believe me, it is in slow motion ;)