请考虑以下代码:
public ObservableCollection<Message> Messages {
get { return new ObservableCollection<Message>(); }
}
我有什么办法可以阻止来电者代码添加/删除/更改项目吗?
编辑:对不起,大家,我刚注意到它是dupe,但接受的答案是错误的。答案 0 :(得分:11)
使用ReadOnlyObservableCollection
怎么样?代码将是:
public ReadOnlyObservableCollection<Message> Messages
{
get { return new ReadOnlyObservableCollection<Message>(new ObservableCollection<Message>()); }
}
阅读ReadOnlyObservableCollection Anti Pattern后,我意识到上述情况不是一个好方法,可能会导致细微的错误。建议的方法是:
public class MyClass
{
public MyClass()
{
myCollection = new ObservableCollection<Message>();
myReadOnlyCollection = new ReadOnlyObservableCollection<Message>(myCollection);
}
public ReadOnlyObservableCollection<Message> Messages
{
get { return myReadOnlycollection; }
}
private readonly ObservableCollection<Message> myCollection;
private readonly ReadOnlyObservableCollection<Message> myReadOnlyCollection;
}
答案 1 :(得分:2)
为什么需要只读ObservableCollection。 如果这个集合是只读的,则不需要观察它。 考虑一个集合&lt; T&gt;
答案 2 :(得分:2)
返回ReadOnlyObservableCollection
代替:
private ReadOnlyObservableCollection<Message> _Messages;
public ReadOnlyObservableCollection<Message> Messages {
get { this._Messages = this._Messages ?? new ReadOnlyObservableCollection(new ObservableCollection<Message>()); return this._Messages; }
}
答案 3 :(得分:1)