我已经为我的WPF应用程序设置好了模型,并使用实体框架ctp5代码优先方式进行工作,以下是一个示例模型类:
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,我不希望模型类具有任何UI特定代码,以便它们可以轻松地在其他应用程序中重用。我应该使所有模型属性都为虚拟的,然后在视图模型中重写它们吗?(似乎编码过多且不必要...)EF Code First能够与这种格式很好地配合吗?
编辑 这是一个类似的问题 In MVVM should the ViewModel or Model implement INotifyPropertyChanged?,然而,唯一的解决方案似乎是将我认为是UI逻辑添加到模型中。也许我可以向模型添加某种委托,并从视图模型中挂钩,后者将反过来使用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
(这只是一个保护机制,允许仅订阅和取消订阅,但禁止例如将处理程序设置为空)。顺便说一下:INotifyPropertyChanged
在System.dll
程序集、System.ComponentModel
命名空间中,与 WPF 或 UI 完全无关。 - Slauma