如何更新CMFCPropertyGridCtrl的属性?

时间:2015-07-28 04:47:30

标签: c++ mfc

我正在开发一个通过MFC将数据模型和用户界面绑定在一起的应用程序,并且我尝试使用CMFCPropertyGridCtrl来显示和编辑从数据模型中提取的数据然后,在我完成CMFCPropertyGridCtrl上显示的特性后,我需要将新更新的数据移回数据模型。执行此操作时,我需要在执行数据传输之前检查CMFCPropertyGridCtrl中的数据是否真正更新。我通过检查IsModified方法的返回值来实现它。但是在将数据移回数据模型后,CMFCPropertyGridCtrl本身并不更新其属性。所以IsModified方法永远不会工作,因为它只是将当前值与初始值进行比较,而不是更新的值。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

CMFCPropertyGridCtrl :: OnPropertyChanged旨在跟踪属性中的更改并反映对系统的更改。此虚函数由CMFCPropertyGridProperty :: OnUpdateValue调用。

因为m_bModified在这里讨论了一些关于它的话,因为它有时引起混淆: m_bModified由函数CMFCPropertyGridProperty :: ResetOriginalValue清除!在这种情况下,m_varValueOrig被设置回属性。 SetOriginalValue可能会更改原始值。

因此,检查和跟踪更改的唯一好处是CMFCPropertyGridCtrl :: OnPropertyChanged。如果属性已更改,则IsModified为true。但这仅与原始值相比......

答案 1 :(得分:0)

如果您要更新价值并希望以粗体文字查看修改,那么在初始化阶段使用CMFCPropertyGridProperty::SetValueCMFCPropertyGridProperty::SetOriginalValue是有意义的。

但是,下次您想要更新您的价值时,请使用CMFCPropertyGridProperty::SetValue,然后手动调用CMFCPropertyGridCtrl::OnPropertyChanged( pointer to your property )

该功能会调用protected SetModifiedFlag()功能,该功能会更新protected m_bIsModified以获得正确的值。