Коллекции обычно используются в xaml для определения ContentPropertyAttribute("PropertyName")
в пользовательском классе, где PropertyName
обычно IList
или IList<T>
.
[ContentProperty(SomeProp)]
class SomeClass
{
//this is where subitems created in xaml would get added automatically
public IList<int> SomeProp { get; set; }
}
Однако, если класс не предоставляет значение для ContentPropertyAttribute
и реализует какой-либо интерфейс типа IList<T>
, IList
, ICollection<T>
или ICollection
, свойство с именем «Items» (если присутствует, и если соответствующего типа, например, IList
), автоматически определяется через отражение (с целью заполнения через xaml), и это имеет место с классом Collection<T>
.
Вы даже можете проверить класс в Reflector, чтобы убедиться, что у него не определено свойство содержимого.
Класс Collection<T>
обладает этим свойством
protected IList<T> Items
{
get
{
return _items;
}
}
и добавления чего-то подобного к типу вашей коллекции (даже если свойство защищено) достаточно, чтобы оно работало в xaml так, как требуется.
Я полагаю, что поведение реализовано таким образом для обратной совместимости.