数据网格绑定到 ObservableCollection WPF

本文关键字:ObservableCollection WPF 绑定 数据网 网格 数据 | 更新日期: 2023-09-27 18:34:21

我将数据网格绑定到可观察集合作为源,数据网格单元格允许用户更改值,当我更改单元格值时的问题,ObservableCollection不会更新

这是我的数据网格代码:

<DataGrid.Columns>
    <DataGridTextColumn Header="Item" Binding="{Binding Item.ItemName,Mode=TwoWay}" Width="100" IsReadOnly="False" />
    <DataGridTextColumn Header="Price" Binding="{Binding SalePrice,Mode=TwoWay}" Width="100" IsReadOnly="False"  />
    <DataGridTextColumn Header="Qtn" Binding="{Binding Quantity,Mode=TwoWay}" Width="100" IsReadOnly="False"  />
    <DataGridTextColumn Header="Totla" Binding="{Binding Total,Mode=TwoWay}" Width="100" IsReadOnly="False"  />
</DataGrid.Columns>

任何建议

数据网格绑定到 ObservableCollection WPF

WPF 数据网格在编辑其单元格时使用事务范围。 这意味着在更改单元格后,需要"提交"才能保持更改。 若要强制提交,可以使用 Tab 键或 Enter 键。

很多人会在单元格中键入新值,然后将鼠标完全键入另一个单元格或另一个控件。 发生这种情况时,DataGrid 会对事务执行"取消"操作,因此更改不会保留在基础集合中。 事实上,除了 Tab 或 Enter 之外的几乎所有操作(或失去焦点(都会取消交易。

如果要捕获更改而不考虑用户按什么键,则基础类应实现 IEditableObject。 这允许视图模型强制提交并保留更改的单元格。

这是WPF DataGrids上已知的"陷阱"。 这里有一个清晰的讨论 http://blogs.msdn.com/b/vinsibal/archive/2009/04/07/5-random-gotchas-with-the-wpf-datagrid.aspx

关于同一主题的更微妙的"陷阱"在这里讨论 http://blogs.msdn.com/b/vinsibal/archive/2009/04/14/5-more-random-gotchas-with-the-wpf-datagrid.aspx

"为什么我的视图模型中的属性在数据网格更改时未更新"的可能重复项?

实现 RaiseProperty更改为您的属性(销售价格,数量,总计(的设置方法

ObservableCollection

仅通知有关集合更改事件的信息,例如从集合中添加、删除项目,ObservableCollection 的基础类属性应单独实现 RaisePropertyChanged 事件以检测其中的更改