在Designer中:设置属性默认值,但在设置默认值时不调用属性?

时间:2011-03-20 08:20:56

标签: c# attributes properties designer

我有一段代码如下:

[DefaultValue(false)]
public bool Property
{
    set
    {
        blah = value;
        someControl.Visible = value;
    }
    get
    {
        return blah;
    }
}

当我查看设计器中的属性时,属性设置为false(如果我使用它,则为true)。
但该物业实际上并未设定。控件的可见值不会更改。

如何让设计师实际使用默认值设置属性?

2 个答案:

答案 0 :(得分:3)

[DefaultValue]属性只是设计者和序列化程序的提示。完全由您来确保您在属性中承诺的默认值实际上是属性的值。在您的情况下不会调用属性setter,因为序列化程序检测到属性的当前值等于默认值,因此省略属性赋值。这是一个优化,它使InitializeComponent()更小更快。

您只需在构造函数中初始化属性值即可确保这一点。请注意控件的Visible属性默认为true。

答案 1 :(得分:1)

两个选项;

  • 取走默认值(bool默认为false)
  • 使用ShouldSerialize *清除

在后者中,你可能想要一个布尔?跟踪“显式集”与“隐式默认值”:

private bool? property;
public bool Property
{
    set
    {
        property = value;
        someControl.Visible = value;
    }
    get
    {
        return property.GetValueOrDefault();
    }
}
public void ResetProperty() { property = null; }
public bool ShouldSerializeProperty() { return property.HasValue; }

请注意,Reset *和ShouldSerialize *是组件模型识别的模式。

相关问题