我正在开发一个通过MFC将数据模型和用户界面绑定在一起的应用程序,并且我尝试使用CMFCPropertyGridCtrl来显示和编辑从数据模型中提取的数据然后,在我完成CMFCPropertyGridCtrl上显示的特性后,我需要将新更新的数据移回数据模型。执行此操作时,我需要在执行数据传输之前检查CMFCPropertyGridCtrl中的数据是否真正更新。我通过检查IsModified方法的返回值来实现它。但是在将数据移回数据模型后,CMFCPropertyGridCtrl本身并不更新其属性。所以IsModified方法永远不会工作,因为它只是将当前值与初始值进行比较,而不是更新的值。我该如何解决这个问题?
答案 0 :(得分:0)
CMFCPropertyGridCtrl :: OnPropertyChanged旨在跟踪属性中的更改并反映对系统的更改。此虚函数由CMFCPropertyGridProperty :: OnUpdateValue调用。
因为m_bModified在这里讨论了一些关于它的话,因为它有时引起混淆: m_bModified由函数CMFCPropertyGridProperty :: ResetOriginalValue清除!在这种情况下,m_varValueOrig被设置回属性。 SetOriginalValue可能会更改原始值。
因此,检查和跟踪更改的唯一好处是CMFCPropertyGridCtrl :: OnPropertyChanged。如果属性已更改,则IsModified为true。但这仅与原始值相比......
答案 1 :(得分:0)
如果您要更新价值并希望以粗体文字查看修改,那么在初始化阶段使用CMFCPropertyGridProperty::SetValue
和CMFCPropertyGridProperty::SetOriginalValue
是有意义的。
但是,下次您想要更新您的价值时,请使用CMFCPropertyGridProperty::SetValue
,然后手动调用CMFCPropertyGridCtrl::OnPropertyChanged( pointer to your property )
该功能会调用protected SetModifiedFlag()
功能,该功能会更新protected m_bIsModified
以获得正确的值。