Я столкнулся с некоторыми вопросами дизайна в моем приложении MVPM (приложение Prism на основе wpf), был бы рад получить ваш совет. Моя модель очень проста:Добавление INotifyPropertyChanged к модели?
public class Customer
{
public string FirstName {get;set;}
public string LastName {get;set;}
}
Как вы можете видеть, у меня нет никакого INotifyPropertyChnaged поддержки моего класса модели. У меня также есть ViewModel для экрана CustomerDetails, который поддерживает INotifyPropertyChanged.
public class CustomerDetailsViewModel:INotifyPropertyChanged /*Or NotificationObject*/
{
/*INotifyPropertyChanged event */
private Customer item;
public Customer Item
{
get{return item;}
set
{
item=value;
//Raise PropertyChanged
//Set IsDirty to true
}
}
}
На мой взгляд, я использую привязку к Item.FirstName и обновляемой ViewModel. Моя проблема заключается в том, что только с помощью свойства FirstName обновляется через представление, а сама модель не поддерживает INotifyPropertyChanged, поэтому элемент setter не вызывается, а IsDirty остается равным false (и, следовательно, не обновляет уведомление IsDirty в пользовательском интерфейсе).
Я знаю, что могу поддержать INotifyPropertyChanged в модели, а затем зарегистрировать в случае Item.PropertyChanged в модели представления, и на самом деле установить IsDirty истинно, Но - Поскольку я также использую CodeFirst, и моя модель класс, разделяемый между моей ServerSide и моей клиентской стороной (не используя Add Service Reference), я не хочу добавлять материал INotifyPreoprtyChanged на сервер.
Я собираюсь создать новый проект, который будет использовать шаблоны T4, чтобы копировать один за другим все мои объекты (как Клиент) и добавляя поддержку INotifyPropertyChanged для каждой модели. Это что-то, что кажется разумным или нет? любые другие предложения?
Спасибо!
Я понимаю, что вы говорите, но это потребует много кодирования (почти) нет оснований. Должен ли я дублировать каждое свойство моей модели в моей модели? – Asaf
@Asaf Вы правы. Я не знаю вашего проекта. Если это всего лишь небольшая, это может быть огромная накладная. Но в крупных проектах, когда у вас есть дополнительные требования, такие как тестируемость, развязка a.s.o. это был бы один из способов их достижения. – DHN