Is it possible to return a read-only ObservableCollection that the caller can't modify?

前提是你 提交于 2019-12-11 08:06:54

问题


Consider the following code:

public ObservableCollection<Message> Messages {
   get { return new ObservableCollection<Message>(); }
}

Is there anything I can do to prevent the caller code from adding/removing/changing items?

EDIT: Sorry, everyone, I just noticed it's a dupe, but the accepted answer is wrong.


回答1:


What about using ReadOnlyObservableCollection

Code would be:

public ReadOnlyObservableCollection<Message> Messages 
{
  get { return new ReadOnlyObservableCollection<Message>(new ObservableCollection<Message>()); }
}

Having read aboutReadOnlyObservableCollection Anti Pattern I realise the above is the not a good approach and may lead to subtle bugs. The suggested approach is:

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



回答2:


Why do you need a read only ObservableCollection. If this collection is read only you don't need to observe it. Consider a Collection<T>




回答3:


Return a ReadOnlyObservableCollection instead:

private ReadOnlyObservableCollection<Message> _Messages;

public ReadOnlyObservableCollection<Message> Messages {
   get { this._Messages = this._Messages ?? new ReadOnlyObservableCollection(new ObservableCollection<Message>()); return this._Messages; }
}



回答4:


What about to use the ReadOnlyObservableCollection< T >



来源:https://stackoverflow.com/questions/6346948/is-it-possible-to-return-a-read-only-observablecollection-that-the-caller-cant

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!