【发布时间】:2017-11-18 15:06:02
【问题描述】:
我正在尝试创建一个允许用户将记录插入数据库的视图。该项目是根据 MVVM 架构构建的。
在我看来,我正在像这样绑定我的 UI 元素:
<StackPanel Orientation="Horizontal">
<Label Width="200">Equipment Number</Label>
<TextBox Width='150'
Text="{Binding Equipment.EquipmentSerialnumber, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>
视图绑定到视图模型,该模型保存当前正在修改的属性:
public Equipment Equipment
{
get { return _equipment; }
private set
{
_equipment = value;
OnPropertyChanged();
}
}
在我看来,我有一个绑定到命令的按钮,它创建了一个新的委托命令。所以在我的视图模型的构造函数中,我设置了按下按钮时执行的方法:
CreateEquipmentCommand = new DelegateCommand(OnCreateEquipmentExecute, OnEquipmentCreateCanExecute);
我正在使用 Prism.Core 来实现这一点。当用户点击按钮时,调用此方法:
private async void OnCreateEquipmentExecute()
{
var equipment = CreateNewEquipment();
await _equipmentRepository.SaveAsync();
}
然后调用CreateNewEquipment 方法,在创建设备后将设备添加到repo。
var equipment = new Equipment();
_equipmentRepository.Add(equipment);
return equipment;
我的 repo 是有状态的,并保持与数据库的连接。这是添加方法:
public void Add(Equipment equipment)
{
_context.Equipments.Add(equipment);
}
SaveAsync() 应该保存对 db 上下文所做的所有更改,从而创建一个插入语句。
但是,当我单击按钮时,视图中的值不会出现在我尝试插入的设备中。我不确定为什么会这样。它给了我一个缺少值的验证错误。
【问题讨论】:
标签: c# sql wpf entity-framework mvvm