如何仅识别在 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>

如何仅识别在 WPF MVVM 中绑定可观察集合的数据网格中的更改行

据我所知,没有办法识别这一点。但是,您可以在类中添加另一个名为 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 中,查找设置了标志的所有对象并更新它们,然后重置标志。