使用MVVM从DataGridView保存更改的最佳方法
本文关键字:最佳 方法 保存更改 DataGridView MVVM 使用 | 更新日期: 2023-09-27 18:02:24
我有DataGridView
,它在我的视图模型中绑定到ObservableCollection
。收集物品实现INotifypropertyChanged
。条目从EF加载一些字段,从web请求加载一些字段。
用户可以编辑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);
}
}
为集合项创建ViewModel类,并在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
以上是基于你的问题的原始示例。