代码之家  ›  专栏  ›  技术社区  ›  shingo

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

  •  0
  • shingo  · 技术社区  · 6 年前

    我有一个自定义类:

    [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;
    

    如何使只读属性可保存?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Derviş Kayımbaşıoğlu    6 年前

    可以使用两个不同的属性和后台字段。检查我的答案 ReadOnly 属性

    [ReadOnly(true)]
    public int ReadOnlyStateProp
    {
        get
        {
            return _ReadOnlyState;
        }
        set
        {
            _ReadOnlyState = value;
        }
    }
    
    public int ReadOnlyState
    {
        get
        {
            return _ReadOnlyState;
        }
        set
        {
            _ReadOnlyState = value;
        }
    }
    

    现在你可以使用 ReadOnlyStateProp 属性窗口和 ReadOnlyState 在可编辑的上下文中。

        2
  •  0
  •   shingo    6 年前

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

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