【问题标题】:How to get only modified Items from WPF Data Grid如何从 WPF 数据网格中仅获取修改后的项目
【发布时间】:2010-08-23 18:55:03
【问题描述】:

我已经用 Editable WPF DataGrid 绑定了一个列表

我只想从 WPF 数据网格中获取修改后的项目以进行更新。

请告诉我该怎么做。

【问题讨论】:

    标签: wpf binding wpfdatagrid


    【解决方案1】:

    我的 WPF 数据网格应用程序设置如下:

    1) 手动定义所有列,设置它们的绑定,并为每个绑定指定它通知源更新

    2) 为数据网格的 SourceUpdated 事件添加了事件处理程序

    3) 在事件处理程序中,我只有以下代码:

    this.updatedItems.Add(BindingOperations.GetBindingExpression(e.TargetObject, e.Property).DataItem as MyClass); 
    

    updatedItems 是一个 HashSet,MyClass 是绑定到数据网格的 ItemsSouce 的对象类型。

    4) 当用户单击保存按钮时,我只是枚举哈希集。 Hashset 很好,因为它只包含唯一值。因此,如果一行被多次编辑,或者即使同一行中的多个单元格被编辑,哈希集仍将只包含该对象的一个​​条目。

    【讨论】:

    • 嗨,Marko,当我手动修改 DataGrid 时,SourceUpdated 事件没有触发。我还为所有绑定的列设置了 NotifiesOnSourceUpdates = true。如果我错了或者我遗漏了什么,请您纠正我
    • 嗯。您使用的是 .NET4 附带的 DataGrid 还是 WPF Toolkit 中的 DataGrid?我不知道在这种情况下两者是否有任何行为差异(我使用的是.NET4)。确保绑定也具有 UpdateSourceTrigger=PropertyChanged。手动更新是指输入值还是在代码中设置值?
    • 嗨,Marco,我错过了 UpdateSourceTrigger=PropertyChanged 现在它正在工作。谢谢
    【解决方案2】:

    您的数据行上有一个 RowState 属性(还有一个 RowChanged 事件),但请确保您需要它。我是否错误地假设数据绑定会自动确定哪些行需要更新?

    【讨论】:

      猜你喜欢
      • 2017-03-29
      • 2017-03-10
      • 2011-11-12
      • 1970-01-01
      • 2015-11-22
      • 2023-03-31
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      相关资源
      最近更新 更多