如何仅识别在 WPF MVVM 中绑定可观察集合的数据网格中的更改行
本文关键字:数据网 数据 网格 集合 识别 何仅 WPF MVVM 绑定 观察 | 更新日期: 2023-09-27 18:34:18
我有一个绑定可观察集合的数据网格。首先,我从数据库中加载数据。如果我更改一行并单击保存按钮,我应该只更新该特定行。如果我添加新行,当我单击保存 ID 时,应该将行插入到数据库中。我毫不怀疑要更新并插入数据库。但问题是如何识别行更改。
<DataGrid SelectedIndex="{Binding SelectedIntex}" IsEnabled="{Binding IsKeySet}" CanUserDeleteRows="False" CanUserAddRows="False" Name="dgwTemplateDetails" SelectionMode="Single" ItemsSource="{Binding OrderTemplateList, Mode=TwoWay}" SelectedItem="{Binding SelectedOrderTemplate}" IsReadOnly="False" AutoGenerateColumns="False" Width="auto">
<DataGrid.Columns>
<DataGridTextColumn Header="Change State" Visibility="Visible" Binding="{Binding ChangeState}"/>
<DataGridTextColumn Header="Srl No" Visibility="Hidden" Binding="{Binding SrlNo}"/>
<DataGridTextColumn Header="Act Code" Width="75" Binding="{Binding ActCode}"/>
<DataGridTextColumn Header="Act Name" Width="275" Binding="{Binding ActName}"/>
<DataGridTextColumn Header="No. Of Days" Width="75" Binding="{Binding NoOfDays}"/>
<DataGridCheckBoxColumn Header="Is Cutting" Width="75" Binding="{Binding IsCutSelected}" />
</DataGrid.Columns>
</DataGrid>
据我所知,没有办法识别这一点。但是,您可以在类中添加另一个名为 HasChanged 的属性
public bool HasChanged { get; set; }
在任何其他属性的 setter 代码中,只需将 HasChanged 属性设置为 true。例如:
private string _ActName;
public string ActName
{
get
{
return _ActName;
}
set
{
_ActName = value;
this.HasChanged = true;
//INotifyPropertyChanged stuff if you are using it here.
}
}
然后,将更改保存到数据库时,只需选择"已更改"属性设置为 true 的所有记录。
var hasChanged = OrderTemplateList.Where(x => x.HasChanged);
在绑定数据对象上实现 IsDirty
标志。更新属性值时,请设置 IsDirty
标志。在 保存Command
中,查找设置了标志的所有对象并更新它们,然后重置标志。