One of the ideas of MVVM is to separate the presentation layer from the data layer. This gives you the ability to change the data that the presentation layer works with without changing the data of the data layer.
Thus, data from the presentation layer is recorded only at your data level at the request of the user. Your redundant FirstName property acts like a layer boundary, which gives you the ability to implement something like the simple "undo all changes".
Consider using a generic ValueViewModel that processes notification of changes in values, as they are necessary for data binding. After this approach, your model will look something like this:
public class PersonViewModel : INotifyPropertyChanged, IDataErrorInfo { private Person _person; [Required]
Using this template, your model does not need to implement the INotifyPropertyChanged interface, which again separates your presentation layer from your data layer.
MVVM is a very complex template, and you will often see things that in the first presentation seem a little formal, but after the template you will get more flexibility. If you decide to violate the MVVM rules, you are putting your entire application architecture in place because this one violation destroys the flexibility you gained with mvvm. Thus, if you plan to violate MVVM, consider not using it at all.
source share