实体框架CTP5代码首先,WPF – MVVM建模

我的模型全部为我的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逻辑添加到模型中.也许我可以在模型中添加某种委托并从viewmodel挂钩,然后将使用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中的属性,然后直接在模型属性的Model上实现INotifyPropertyChanged,并仅在Model实例的ViewModel上实现,如下所示:

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中我直接绑定到Model属性,例如:

<TextBox Text="{Binding Task.Content}" />

(TaskViewModel将是View的DataContext.)

我这样做主要是为了避免你提到的“很多不必要的编码”,我找不到一个缺点. (我也使用EF Code-First使我的模型持久化.)

转载注明原文:实体框架CTP5代码首先,WPF – MVVM建模 - 代码日志