我有一段代码如下:
[DefaultValue(false)]
public bool Property
{
set
{
blah = value;
someControl.Visible = value;
}
get
{
return blah;
}
}
当我查看设计器中的属性时,属性设置为false(如果我使用它,则为true)。
但该物业实际上并未设定。控件的可见值不会更改。
如何让设计师实际使用默认值设置属性?
答案 0 :(得分:3)
[DefaultValue]属性只是设计者和序列化程序的提示。完全由您来确保您在属性中承诺的默认值实际上是属性的值。在您的情况下不会调用属性setter,因为序列化程序检测到属性的当前值等于默认值,因此省略属性赋值。这是一个优化,它使InitializeComponent()更小更快。
您只需在构造函数中初始化属性值即可确保这一点。请注意控件的Visible属性默认为true。
答案 1 :(得分:1)
两个选项;
在后者中,你可能想要一个布尔?跟踪“显式集”与“隐式默认值”:
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 *是组件模型识别的模式。