I'm developing an application in WPF MVVM, but I'll also need to create an MVC project in the same solution.
I would like to know if there is any way to reuse the same Models in both classes, and the best way to do it, since to meet the MVVM specifications
For example, I need to add a "PropertyChanged" to the set of my properties, something unnecessary in MVC project.
Create a shared assembly. Call it Contracts or Models and share it between your WPF and MVC
I agree with @@Douglas Gandini. You should define your business objects in a separate assembly that you can reference from both your ASP.NET and WPF applications. These classes should not implement any client-specific interfaces such as INotifyPropertyChanged but be pure POCO classes that contains business logic only.
In your WPF application, you could then create a view model class that implements the INotifyPropertyChanged interface and wraps any properties of the business object that it makes sense to expose to and bind to from the view.
The view model then has a reference to the model, i.e. your business object that is defined in a separate assembly that may be shared between several different client applications, and the view binds to the view model. This is typically how the MVVM design pattern is (or should be) implemented in a WPF application. The view model class contains your application logic, for example how to notify the view when a data bound property value is changed, and the model contains the business logic that is the same across all platforms and applications.
Of course this means that you will end up with a larger number of classes in total but this is not necessarily a bad thing as each class has its own responsibility. The responsibility of a view model is to act as a model for the application specific XAML view whereas the responsibility of the model class is to implement the business logic.