【问题标题】:private setter for a list of custom object自定义对象列表的私有设置器
【发布时间】:2013-10-21 19:54:50
【问题描述】:

我有这段代码可以正常工作

public partial class MainWindow : Window
{
    private static ObservableCollection<Archive> _archiveList = new ObservableCollection<Archive>();
    public static ObservableCollection<Archive> archiveList { get { return _archiveList; } }
}
private void build_archiveList()
{
    // create new Archive
    // add the new Archive to archiveList
}

...但是如果我尝试使用自动实现的属性,它将无法正常工作,我不明白为什么。 具有自动实现属性的代码:

public partial class MainWindow : Window
{
    public static ObservableCollection<Archive> archiveList { get; private set; }
    public MainWindow()
    {
            InitializeComponent();

            archiveList = new ObservableCollection<Archive>();
            build_archiveList();
    }
}

为什么第二种方法不起作用?

编辑:抱歉不完整,列表与数据网格绑定,使用第二种方法时数据网格保持为空(尽管添加了新存档,因为两种方法都增加了 archiveList.count)

build_archiveList 如何将档案添加到列表中(observablecollection):

tmpArchive.content.Add(new ArchiveFile(bfile.FileName, bfile.Crc.ToString(), false));
archiveList.Add(tmpArchive);

【问题讨论】:

  • 究竟什么不起作用?显示build_archiveList() 的实现。
  • 感谢您的快速回答,我对我的原始帖子进行了编辑。 build_archiveList 是 30-40 行,我应该把它全贴在这里吗?
  • 在第一个版本中,您的属性是静态的,在第二个版本中,它是实例。该方法怎么样,是静态的还是非静态的?是故意的吗?
  • 哎呀,这是一个错字。在两个示例中它都应该是静态的
  • 将此属性设为静态是否有任何具体原因?

标签: c# properties private public getter-setter


【解决方案1】:

移动

archiveList = new ObservableCollection<Archive>();

到静态构造函数。

说明

您绑定到 null 的自动属性(绑定发生在 InitializeComponent),然后添加新列表。

【讨论】:

  • 什么意思?这就是我在第二个示例中所做的,不是吗(因为不可能将自动实现的属性和初始化结合起来)?
  • 再次:将静态属性的初始化移动到静态构造函数。关键字是静态
  • 啊,非常感谢!我现在明白为什么它不起作用了!所以实际上如果我想使用自动实现的属性,我应该在调用 InitializeComponent 之前初始化archiveList? (和archiveList的声明写在同一行是不可能的,所以我会写在InitializeComponent上面的一行,很好,对吧?)
  • 为什么要在InitializeComponent前面加?你必须阅读Static Constructors
  • 在静态构造函数中初始化静态成员的最佳实践。
猜你喜欢
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-13
  • 2020-06-20
  • 2016-04-23
相关资源
最近更新 更多