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 に答える