2016-08-15 55 views
0

我的DataGridView在我的View Model中绑定到ObservableCollection。 收藏品中的物品INotifypropertyChanged。项目从EF加载一些字段并从Web请求一些字段。使用MVVM从DataGridView保存更改的最佳方式

用户可以编辑DataGridView中的一些字段。当用户编辑单元格时(没有任何“提交”按钮),如何保存数据库中项目的更改?

我可以订阅列表中的每个项目列表PropertyChanged事件。这是一个好方法吗?

像这样的事情在事件处理程序:

private void Item_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) 
    { 
     var item = (TradeItemViewModel) sender; 
     if (e.PropertyName == "CountLimint" || e.PropertyName == "PriceLimit") 
     { 
      var repository = new ItemsRepository(); 
      var dto_item = repository.GetById(item.ClassId, item.IntanceId); 
      dto_item.CountLimit = item.CountLimint; 
      dto_item.PriceLimit = item.PriceLimit; 
      repository.Update(dto_item); 
     } 
    } 
+0

这是一种方法。 – Will

回答

1

创建视图模型类中的setter您的收藏和更新数据库的项目。

public class TradeItemDatabaseViewModel 
{ 
    private readonly TradeItem _Model; 

    public int CountLimit 
    { 
     get { return _Model.CountLimit; } 
     set(int value) 
     { 
      if(Equals(_Model.CountLimit, value) == true) return; 

      this.SaveCountLimit(value); 
      _Model.CountLimit = value; 

      this.RaisePropertyChanged(nameOf(this.CountLimit)); 
     }   
    } 

    private void SaveCountLimit(int value) 
    { 
     var repository = new ItemsRepository(); 
     var dto_item = repository.GetById(item.ClassId, item.IntanceId); 
     dto_item.CountLimit = item.CountLimint; 
     repository.Update(dto_item); 
    } 
} 

然后绑定ObservableCollection<TradeItemdatabaseViewModel>DataGridView.DataSource

以上是根​​据你的问题原料的例子。