0

希望有人能把事情弄清楚。在下面的 ViewModel 中,使用 Entity Framework 作为我的模型是否消除了使用 [Model] 和 [[ViewModelToModel(...)] 属性的需要?无论有没有它们,代码都运行相同,因为视图中的绑定会忽略它们并绑定到 ObservableCollection。

注释?

 public class MainWindowViewModel : ViewModelBase
{
    Models.OneHour_DataEntities ctx;

    public MainWindowViewModel()
        : base()
    {
        Save = new Command(OnSaveExecute, OnSaveCanExecute);

        ctx = new Models.OneHour_DataEntities();
        Customers = new ObservableCollection<Models.Customer>(ctx.Customers);
    }

    public ObservableCollection<Models.Customer> Customers
    {
        get { return GetValue<ObservableCollection<Models.Customer>>(CustomersProperty); }
        set { SetValue(CustomersProperty, value); }
    }

    public static readonly PropertyData CustomersProperty = RegisterProperty("Customers", typeof(ObservableCollection<Models.Customer>), null);

    public Command Save { get; private set; }
     private bool OnSaveCanExecute()
     {
         return true;
     }

     private void OnSaveExecute()
    {
        ctx.SaveChanges();
    }

}

4

1 回答 1

0

Catel 使用不同的接口来利用模型。例如,它使用以下接口:

  • IEditableObject => 在用户取消时撤消对模型的更改
  • INotifyPropertyChanged => 模型更新时更新视图模型

如果您的实体模型实现了这些接口,您可以将属性定义为模型。

但是,在您的示例中,您使用 ObservableCollection (因此是模型列表)作为模型。这不受支持(或者,集合必须支持 IEditableObject 和 INotifyPropertyChanged)。

于 2013-06-17T06:43:06.970 回答