У меня есть моя модель, полностью настроенная для моего приложения WPF, и сначала я работаю с кодом ctp5 entity framework, вот образец класса модели:
public class Task
{
public int ID { get; set; }
public int Index { get; set; }
public string Content { get; set; }
public int Indentation { get; set; }
public DateTime Start { get; set; }
public decimal Effort { get; set; }
public decimal CompletedEffort { get; set; }
public decimal Cost { get; set; }
}
Каким будет рекомендуемый способ построения моей модели представления? Мои модели представления будут реализовывать INotifyPropertyChanged, я не хочу, чтобы классы моделей имели какой-либо конкретный код пользовательского интерфейса, чтобы их можно было легко повторно использовать в других приложениях. Должен ли я сделать все свойства модели виртуальными, а затем переопределить их в модели представления? (кажется, много ненужного кодирования ...) Будет ли код EF хорошо работать с этим типом формата?
Изменить. Это несколько похожий вопрос В MVVM должна ли ViewModel или Model реализовывать INotifyPropertyChanged?, однако единственные решения, похоже, добавляют в модель то, что я считаю логикой пользовательского интерфейса. Возможно, я могу добавить в модель какой-то делегат и подключиться к нему из модели просмотра, которая, в свою очередь, будет использовать INotifyPropertyChanged ... что-то вроде этого?
public class Task
{
public delegate void HandleChange(string propertyName);
public HandleChange ChangeHandler;
public int ID
{
get
{
return ID;
}
set
{
if(ID != value)
{
ID = value;
ChangeHandler("ID");
}
}
}
...
INotifyPropertyChanged
! Ваш делегатHandleChange
имеет то же назначение, что и делегатPropertyChangedEventHandler
, а переменнаяChangeHandler
имеет то же назначение, что иPropertyChanged
. Единственное отличие состоит в том, что вы не помечаете ChangeHandler какevent
(это всего лишь механизм защиты, позволяющий только подписку и отказ от подписки, но запрещающий, например, устанавливать для обработчика значение null). Кстати:INotifyPropertyChanged
находится в сборкеSystem.dll
, пространство именSystem.ComponentModel
; это вообще не имеет ничего общего с WPF или UI. - person Slauma   schedule 21.02.2011