Можно ли вернуть ObservableCollection только для чтения, которую вызывающая сторона не может изменить? - PullRequest
1 голос
/ 14 июня 2011

Рассмотрим следующий код:

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

Могу ли я что-нибудь сделать, чтобы код вызывающего абонента не добавлял / не удалял / не изменял элементы?

РЕДАКТИРОВАТЬ: Извините, все, я только что заметил, что это обман , но принятый ответ неверен.

Ответы [ 4 ]

11 голосов
/ 14 июня 2011

Как насчет использования 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;
}
2 голосов
/ 14 июня 2011

Вернуть ReadOnlyObservableCollection вместо:

private ReadOnlyObservableCollection<Message> _Messages;

public ReadOnlyObservableCollection<Message> Messages {
   get { this._Messages = this._Messages ?? new ReadOnlyObservableCollection(new ObservableCollection<Message>()); return this._Messages; }
}
2 голосов
/ 14 июня 2011

Зачем вам нужна только для чтения ObservableCollection. Если эта коллекция только для чтения, вам не нужно ее наблюдать. Рассмотрим коллекцию

1 голос
/ 14 июня 2011

Как насчет использования ReadOnlyObservableCollection

...