Вам не нужен ViewModel-Class для каждого имеющегося у вас Model-Class. Ваши классы моделей должны реализовывать интерфейс INotifyPropertyChanged
.
Вам нужны ViewModels для взаимодействия с вашими представлениями. В ViewModels вы можете иметь экземпляры ваших Model-Classes.
Кстати: чтобы не писать код для INotifyPropertyChanged
каждый раз в каждой ViewModel и Model, я создал абстрактный базовый класс, из которого все получено. Этот класс выглядит так:
public abstract class NotifyBase : INotifyPropertyChanged
{
private readonly Dictionary<string, object> mapping;
protected NotifyBase()
{
mapping = new Dictionary<string, object>();
}
protected void Set<T>(T value, [CallerMemberName] string propertyName = "")
{
mapping[propertyName] = value;
OnPropertyChanged(propertyName);
}
protected T Get<T>([CallerMemberName] string propertyName = "")
{
if(mapping.ContainsKey(propertyName))
return (T)mapping[propertyName];
return default(T);
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemeberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if(handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}