【问题标题】:Updating a PropertyGrid更新 PropertyGrid
【发布时间】:2011-03-08 10:08:57
【问题描述】:

如何在其 SelectedObject 属性中的对象更改时自动更新属性网格?我已经尝试在我的类中实现 INotifyPropertyChanged,但属性网格实际上并没有在后台显示对象的新属性,直到我单击它。

我尝试直接订阅我的对象的 PropertyChanged 事件,并在调用 PropertyGrid 时调用它的 Refresh() 方法。但我的一些属性是相关的。这意味着更改一个属性可能会引发多个 PropertyChanged 事件。这似乎工作正常,但我仍然想知道是否有通过 DataBinding 执行此操作的更简洁的方法。另外我想避免在用户只更新一个属性后多次刷新控件。

那么有没有办法让 PropertyGrid 从 PropertyChanged 事件中刷新?

【问题讨论】:

    标签: c# winforms data-binding propertygrid inotifypropertychanged


    【解决方案1】:

    尝试将 RefreshProperties 属性添加到具有依赖关系的每个属性:

    [RefreshProperties(RefreshProperties.All)]
    

    现在,每次此属性更改时 - 它都会自动刷新其他字段。 这比每次调用属性网格的“Refresh()”要干净得多。

    【讨论】:

    • 因为发布晚了大约 8 个月。
    • 几乎解决了所有问题。 INotifyPropertyChanged 需要多次触发检查,而这个 RefreshProperties 排序实际上绕过了所有这些(速度较慢,在我的机器上似乎但似乎永远不会失败) 谢谢!
    【解决方案2】:

    我不知道是否有内置方法可以做到这一点,但如果您想避免多次调用 Refresh 以获得相关属性,这里有一个建议:

    PropertyChanged 事件发生时,启动一个计时器。如果在计时器结束之前事件再次发生,则什么也不做。在定时器的Tick事件中,刷新PropertyGrid并停止定时器

    【讨论】:

    • 我知道这个答案已经有两年了,但我和 OP 有同样的问题,我想在这个答案中添加 Timer 具有 AutoReset 属性。这意味着您不必手动停止计时器。 :-)
    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多