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;
}
我正在开发一个控件。控件有一个 属性 集合类型:
[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;
}