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

How to save readonly property value in PropertyGrid

我有一个习惯class:

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

只读 属性:

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

属性 在属性 window 中显示并可编辑。

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

我认为设计师生成这样的代码并不难:

myControl.MyProperty.State = 1;

如何使只读 属性 可保存?

您可以将两个不同的属性与支持字段一起使用。使用 ReadOnly 属性

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

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

现在您可以将 ReadOnlyStateProp 用于 属性 window 和 ReadOnlyState 在可编辑的上下文中。

找了几天找到解决方法,很简单:

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