如何在PropertyGrid中保存只读属性值

时间:2019-02-16 15:52:00

标签: c# propertygrid

我有一个自定义类:

[TypeConverter(typeof(ExpandableObjectConverter))]
public class CustomClass
{
    public int State { get; set; }
}

只读属性:

public class MyControl : UserControl
{
    public CustomClass MyProperty { get; } = new CustomClass();
}

该属性在属性窗口中显示并可以编辑。

PropertyGrid

但是该值未保存,如果重新打开设计器,它将恢复。

我认为设计人员生成如下代码并不难:

myControl.MyProperty.State = 1;

如何使readonly属性可保存?

2 个答案:

答案 0 :(得分:0)

您可以在支持字段中使用两个不同的属性。使用ReadOnly属性

在下面检查我的答案
[ReadOnly(true)]
public int ReadOnlyStateProp
{
    get
    {
        return _ReadOnlyState;
    }
    set
    {
        _ReadOnlyState = value;
    }
}

public int ReadOnlyState
{
    get
    {
        return _ReadOnlyState;
    }
    set
    {
        _ReadOnlyState = value;
    }
}

现在您可以将ReadOnlyStateProp用于属性窗口,并将ReadOnlyState用于属性窗口 在可编辑的上下文中。

答案 1 :(得分:0)

经过几天的搜索,我找到了一个解决方案,非常简单:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public CustomClass MyProperty { get; } = new CustomClass();