.Net WinForm应用程序无法持久化类型为List<MyClass>的属性

5
我创建了一个用户控件在Windows应用程序C# 3.5中,它有许多属性(字符串,整数,颜色等)。这些属性可以在属性窗口中修改,值也可以被持久化而没有问题。
然而,我创建了一个类似于下面的属性:
  public class MyItem
  {
       public string Text { get; set; }
       public string Value { get; set; }
  }

  public class MyControl : UserControl
  {
       public List<MyItem> Items { get; set; }
  }

属性对话框允许我添加和删除这些项目,但是一旦我关闭对话框,输入的值就会丢失。
我错过了什么?非常感谢!

为了在自定义对象的属性窗口中保留设计时的编辑/更改,我认为您需要实现TypeConverter,并且我认为您可能希望继承自ExpandableObjectConverter,以便在属性窗口中获得更好的用户界面。 - BillW
1个回答

2

您需要初始化这些项目,因此自动获取器/设置器在这里无法帮助您。

请尝试:

public class MyControl : UserControl
{
    private List<MyItem> _items = new List<MyItem>();

    public List<MyItem> Items
    {
         get { return _items; }
         set { _items = value; }
    }
 }

2
您不必创建私有变量来实现此操作。他可以继续使用自动属性的get;set;符号,但是他需要在UserControl的默认构造函数中初始化Items = new List<MyItem>(); - Nick
1
有一个相当“可疑”的答案。这很可疑,可能根本没有任何影响。读者请注意:你的情况可能会有所不同 - 比平常更多。 - Marc Gravell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接