【发布时间】:2021-08-04 04:26:20
【问题描述】:
在我的主窗口中,我有一个从 SQL 加载对象列表的数据网格:
if (PartView.Instance.CurrentPart != null)
{
DgSupplierData.ItemsSource = partData.GetAllPartSuppliersByPart(PartView.Instance.CurrentPart.Id);
}
partData 只是一个帮助类,它使用 dapper 从存储过程中加载列表。
当用户双击一行时,会打开一个“编辑窗口”,这是一个将行数据分配给自定义对象 (PartSupplierModel) 以供用户编辑的基本窗口。一旦他们编辑了数据并点击了保存按钮,存储过程就会将数据保存到 SQL Server(非常简单并且工作正常)。但是,如果用户对任何文本框进行了任何更改,但随后决定他们不希望保存更改并且他们只是关闭表单然后重新选择同一行,则表单将保留他们所做的更改(尽管不会保存到 SQL Server,因为没有调用按钮事件,这是我们想要的)。我想要的是数据不会更改原始表中的源,除非单击了编辑/保存按钮。我相信这是由于我绑定对象的方式?但是,作为 WPF 的新手,我很难理解如何阻止此功能。
示例:这显示了我如何在编辑表单上设置文本框
<TextBox x:Name="TxtManufacturer"
Text="{Binding Manufacturer, UpdateSourceTrigger=PropertyChanged}"
VerticalAlignment="Center"
Height="25"
MaxLength="150"/>
该对象在加载编辑表单时存储为成员变量,并设置为数据上下文:
private PartSupplierModel _partSupplier = new PartSupplierModel();
public PartSupplierView(PartSupplierModel supplierData = null, int partId = 0)
{
InitializeComponent();
_partSupplier = supplierData;
this.DataContext = _partSupplier;
}
【问题讨论】:
-
public PartSupplierView() 是表单的构造函数,在使用“new”时仅调用一次。如果您创建一个 Load() 方法并放入以下行: this.DataContext = _partSupplier;那么每次使用 Show() 方法时,DGV 都会加载原始数据。