Присоединение IList <T>к коллекции ObservableCollection <T> - PullRequest
2 голосов
/ 07 февраля 2020

Collection<T> - это обертка вокруг IList<T>. Список может быть прикреплен в конструкторе . Насколько я знаю, другого метода не предусмотрено.

Хотя ObservableCollection<T> является производным от Collection<T>, вы не можете прикрепить IList<T>. Экземпляр может быть создан из List<T>, а не из IList<T>, а список скопирован .

Исходный код c, похоже, подтвердите вышесказанное.

  1. Является ли это несоответствие ошибкой ?
  2. Как присоединить мою собственную IList<T> реализацию к ObservableCollection<T>? Решение должно работать со стандартом ObservableCollection<T>.

Я новичок в c#. Спасибо.

1 Ответ

2 голосов
/ 07 февраля 2020

Это определенно не похоже на ошибку, и я не знаю, почему это также было бы несоответствием.

Функциональность ObservableCollection предотвращает это. Функциональность гарантирует, что вы можете быть уведомлены о любых изменениях ObservableCollection. Для того, чтобы сделать это, ему нужны полные изменения управления базовой структурой данных, в которой хранятся ее записи.

Если бы он просто "прикрепил" и существующий список, для ObservableCollection не было бы никакого дескриптора для уведомления изменений. Давайте представим следующий сценарий:

IList<string> someStringList = new List<string>
{
    "Entry1",
    "Entry2",
    "Entry3"
};

var observableCollection = new ObservableCollection<string>(someStringList);

observableCollection.CollectionChanged += (sender, eventArgs) => Console.WriteLine("Something changed!");

someStringList.Add("This addition cannot be seen by the ObservableCollection!");

Что соответствует, ObservableCollection создал копию, поэтому, если мы посмотрим на нее, она не будет содержать «Это дополнение не может быть замечено ObservableCollection!» entry.

Теперь, если бы то, что вы хотели, сработало (поэтому ObservableCollection должен был бы исходный список «прикрепить», а не скопировать), у нас было бы что-то странное. событие CollectionChanged не сработало бы (добавление не было go путем добавления ObservableCollection), однако, если вы осмотрите observableCollection, оно будет содержать добавленную запись (так как она была добавлена ​​в "" прикрепленный "список), что сделало бы все это непоследовательным.

По крайней мере, это мое мнение о том, почему это, вероятно, выбор дизайна вместо ошибки.

Надеюсь, это поможет!

...