gpt4 book ai didi

c# - 如何制作只读的 ObservableCollection 属性?

转载 作者:IT王子 更新时间:2023-10-29 04:02:18 25 4
gpt4 key购买 nike

我想在包含对象列表(来自数据库)的 View 模型上公开一个属性。

我需要这个集合是只读的。也就是说,我想阻止添加/删除等。但允许 foreach 和索引器工作。我的意图是声明一个包含可编辑集合的私有(private)字段,并使用只读公共(public)属性引用它。如下

public ObservableCollection<foo> CollectionOfFoo { 
get {
return _CollectionOfFoo;
}
}

但是,该语法只是防止更改对集合的引用。它不会阻止添加/删除等。

实现此目标的正确方法是什么?

最佳答案

[先前] 接受的答案实际上会在每次访问 ReadOnlyFoo 时返回一个不同的 ReadOnlyObservableCollection。这是一种浪费,并可能导致细微的错误。

一个更好的解决方案是:

public class Source
{
Source()
{
m_collection = new ObservableCollection<int>();
m_collectionReadOnly = new ReadOnlyObservableCollection<int>(m_collection);
}

public ReadOnlyObservableCollection<int> Items
{
get { return m_collectionReadOnly; }
}

readonly ObservableCollection<int> m_collection;
readonly ReadOnlyObservableCollection<int> m_collectionReadOnly;
}

参见 ReadOnlyObservableCollection anti-pattern进行全面讨论。

关于c# - 如何制作只读的 ObservableCollection 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1763696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com