If you are working with WPF, definitely use the MVVM design pattern. It makes life a lot easier and more convenient for the future.
Regarding your comment
We believe that using this template can lead to rework during definition models, which must be rewritten during ViewModels definitions.
There are two ways to handle models / ViewModels in MVVM. The "MVVM-purist" approach is to set the model properties from the ViewModel, in which case yes, you will duplicate some code. A more practical approach is to pull the entire model out of the ViewModel. Both methods are acceptable, although I would recommend using the 2nd method if you do not have a very large project with individuals / teams working at the Model and ViewModel levels.
MVVM Purist:
public class CustomerViewModel { private Customer _customer; public string Name { get { return _customer.Name; } set { if (value != _customer.Name) { _customer.Name = value; RaisePropertyChanged("Name"); } } } } <TextBlock Text="{Binding Name}" />
More practical approach:
public class CustomerViewModel { private Customer _customer; public Customer Customer { get { return _customer; } set { if (value != _customer) { _customer= value; RaisePropertyChanged("Customer"); } } } } <TextBlock Text="{Binding Customer.Name}" />
As for Prism, I think this is a great library. I prefer their NotificationObject and EventAggregator be mine, and like DelegateCommand when I'm used to it not automatically raising it CanExecuteChanged when the CanExecute parameter CanExecute .
The only thing about Prism that I donβt really like is their RegionManager . I feel that this allows you to control the flow of applications too much, not ViewModels. I also see that it is often misused for navigation, and often it becomes a mess. I still use it to determine the layout of my application (for example, MenuRegion , NavigationRegion , ContentRegion ), but I also use the ViewModel for all navigation needs.
So, ultimately, I would say go for it! I enjoy working with WPF and I believe that you should not use WPF without the MVVM design pattern. Prism is also a great library for providing some of the missing features that I think are needed in every MVVM application.