【问题标题】:PropertyGrid - how to add ability to reset property of collection type in design-timePropertyGrid - 如何在设计时添加重置集合类型属性的能力
【发布时间】:2017-03-29 14:34:33
【问题描述】:

我正在开发一个控件。控件具有 Collection 类型的属性:

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

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

重置方法:

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

没有任何效果。 “重置”操作已禁用。

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

【问题讨论】:

    标签: c# winforms controls design-time


    【解决方案1】:

    这是可能的,但该属性必须是公共的,并且您必须提供一个(甚至是假的)公共属性设置器:

    [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;
    }
    

    【讨论】:

    • “你必须提供一个(甚至是假的)公共属性设置器”这意味着不可能为只读属性提供重置功能。
    猜你喜欢
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 2021-12-17
    • 2019-09-21
    • 2010-09-23
    • 2018-05-08
    相关资源
    最近更新 更多