如何使用MVVM在WPF DataGrid单元格的值发生更改时触发事件?

4

我需要帮助使用MVVM设计模式的WPF数据网格。

我有一个绑定到ObservableCollection的数据网格。 网格中的第一列包含无法编辑的十进制值。 第二列包含必须输入十进制值的文本框。 第三列必须显示第一列和第二列中的值之间的差异,就在输入时。 我希望处理observablecollection的Collectionchanged事件将允许我确定集合中的某个项目的字段何时已更改,但似乎没有效果。

我还尝试处理网格的选定项的PropertyChanged事件,但也不起作用。

请问有人能告诉我如何在视图模型中引发事件,每当数据网格DataGridTemplateColumn中文本框中的值发生变化时?然后如何在第三列的相应行中设置计算出的值?


ObservableCollection 中的项是否实现了 INotifyPropertyChanged 接口? - CodingGorilla
你是否也在 TextBox 的绑定上设置了 UpdateSourceTrigger? - RMart
嗨。集合中的项确实实现了INotifyPropertyChanged,并且对于DataGridTemplateColumn中的数据网格和文本框,UpdateSourceTrigger=PropertyChanged也适用。 - user823486
1个回答

2

你应该从另一个角度尝试解决它(即从ViewModel开始)。

ObservableCollection中的项(称其为CollectionItem)应实现INotifyPropertyChanged。

您应该调整您的网格,以便在更改数据时注册/提交(而不是在焦点离开/移动时)

然后,在您的CollectionItem中,应基于输入值的更改尝试刷新该值。如果需要更多详细信息,请告诉我。


嗨。集合中的项确实实现了INotifyPropertyChanged,并且对于DataGridTemplateColumn中的数据网格和文本框,UpdateSourceTrigger=PropertyChanged也得到了应用。 - user823486
数据网格的IEditableObject实现可能会推迟 change 通知,直到您从该行更改焦点(正如anvarbek所指出的那样)。您已经验证了失去焦点时的更改通知吗? - Oppositional
嗨。失去焦点时更改通知不会发生。 - user823486

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接