【发布时间】:2011-07-01 10:09:21
【问题描述】:
我已经为我的 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 代码首先会与这种格式很好地配合吗?
编辑 这是一个有点相似的问题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(这只是一种保护机制,仅允许订阅和取消订阅,但例如禁止将处理程序设置为 null)。顺便说一句:INotifyPropertyChanged在程序集中System.dll,命名空间System.ComponentModel;它根本与 WPF 或 UI 无关。
标签: wpf entity-framework mvvm code-first ef-code-first