PropertyGrid - 如何添加在设计时重置集合类型 属性 的能力

PropertyGrid - how to add ability to reset property of collection type in design-time

我正在开发一个控件。控件有一个 属性 集合类型:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
TimeRuleCollection TimeRules { get { return timeRules; } }

是否可以允许用户在设计时通过 属性 网格重置 属性?

重置方法:

    void ResetWorkTimeRules() {
        TimeRules.Clear();
    }

没有任何影响。 "Reset" 操作已禁用。

是否可以通过这种方式重置只读属性?

可以,但是属性必须是public而且你必须提供一个(甚至是假的)public属性setter:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public TimeRuleCollection TimeRules
{ 
    get { return timeRules; }
    set { throw new NotSupportedException(); }
}

下一个要求是有方法void {PropertyName}Reset()(它可以是任何可访问性,通常是private):

private void ResetTimeRules()
{
    timeRules.Clear();
}

您可以选择通过实施方法 bool ShouldSerialize{PropertyName}():

来控制何时启用 Reset 命令
private bool ShouldSerializeTimeRules()
{
    return timeRules.Count > 0;
}