Вы пытаетесь использовать неявный синтаксис коллекции XAML.Для этого свойство (в данном случае Content
) должно иметь тип, реализующий ICollection
.Примечание: не ICollection
, а тип, который реализует ICollection
.
. Вы не можете просто использовать интерфейс, потому что XamlReader
должен знать, какой тип объекта создать.Если вы не указали тип, как он должен решить?Поиск во всех доступных для вашей сборки типах, поиск тех, которые реализуют ICollection<MiniObject>
, отбрасывание тех, у которых нет конструктора без параметров, и затем случайный выбор одного из них?Нет.
Когда вы определяете Content
как List<MiniObject>
, XamlReader
знает, какой тип объекта он должен создать.Поскольку этот тип реализует ICollection
, он может использовать неявный синтаксис коллекции.Поэтому он просто создает объект и вызывает Add
для добавления дочерних элементов, и если вы вставите туда дочерний элемент, который не является MiniObject
, вы получите ошибку времени выполнения.
Вы говоритечто "мне нужно избегать использования фактической реализации" в вашем свойстве Content
.В этом случае вы не можете использовать неявный синтаксис коллекции.Вам нужно будет сделать то, что вы делаете во втором примере: явно определить тип, который реализует ICollection<MiniObject>
, и добавить дочерний элемент в ваш XAML, чтобы создать его явно.