我已经为我的 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 代码首先适合这种类型的格式吗?
Edit这是一个有点类似的问题在 MVVM 中,ViewModel 或 Model 应该实现 INotifyPropertyChanged 吗? https://stackoverflow.com/questions/772214/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");
}
}
}
...
我正在做的是将模型类的实例创建为 ViewModel 中的属性,然后实现INotifyPropertyChanged
直接在 Model 上获取 Model 属性,在 ViewModel 上仅获取 Model 实例,如下所示:
public class Task : INotifyPropertyChanged
{
// Implementation of INotifyPropertyChanged
// Raising the PropertyChanged event in the Setters of all properties
}
public class TaskViewModel : INotifyPropertyChanged
{
private Task _task;
public Task Task
{
get
{
return _task;
}
set
{
if (_task != value)
{
_task = value;
RaisePropertyChanged("Task");
}
}
}
// INotifyPropertyChanged implementation
}
然后在 XAML 中我直接绑定到模型属性,例如:
<TextBox Text="{Binding Task.Content}" />
(TaskViewModel 在这里是视图的 DataContext。)
我这样做主要是为了避免你提到的“大量不必要的编码”,而且我找不到缺点。 (我也使用 EF Code-First 使我的模型持久化。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)