Почему CompositeCollection не замораживается?

Я пишу приложение, используя шаблон MVVM. Я предоставляю данные своему представлению, устанавливая свойство DataContext моего представления для экземпляра моей ViewModel. Обычно я просто использую Binding оттуда и иду своим путем.

Недавно я попытался реализовать ComboBox с & quot; extra & quot; мой элемент ViewModel, который находится за пределами коллекции и содержит надпись «Выбрать элемент».

<ComboBox>    
    <ComboBox.ItemsSource>    
        <CompositeCollection>
           <ComboBoxItem IsEnabled="False">Select Item</ComboBoxItem>
           <CollectionContainer Collection="{Binding MyItemsCollection}" />    
        </CompositeCollection>
    </ComboBox.ItemsSource>
</ComboBox>

Проблема в том, что CompositeCollection не является Freezable:Обзор замораживаемых объектов, Это приводит к появлению только статического ComboBoxItem и ни одного из результатов моего выражения привязки.

Моей первоначальной реакцией на проблему было просто реализовать собственную версию CompositeCollection, котораяwas Freezable. Это, однако, напрашивается на следующий вопрос:

Why isn't CompositeCollection a Freezable in the first place?

Меня беспокоит то, что в целом эти решения принимаются по определенной причине, и я не чувствую, что знаю достаточно о Freezable, чтобы сказать, почему они не наследуют его. Я знаю, что могу реализовать эту коллекцию, но я обеспокоен, что в этом случае будет ощутимая разница в производительности.

Любая помощь будет оценена. Спасибо!

Also: please note that I realize I can insert a Null or some other special value and provide and template or valueconverter to do what I want. This is not the question I'm interested in... only the question in bold above.

Update:

После некоторых дальнейших исследований, проведенных в комментарии ArsenMkrt, я убедился, что это фактически упущение. Доказательства таковы:

There is a collection that is freezable called FreezableCollection<T>. I does not produce CollectionViews, which makes it inappropriate for my needs directly. Sam Bent of MSFT says as much in the above link. I cannot find contact information for him yet, but I plan on discussing this with him if I get the chance.

Мой текущий план, чтобы обойти эту проблему, состоит в том, чтобы создать новую коллекцию со свойствами CompositeCollection иFreezableCollection<T>, Я не знаю, сработает ли это еще, но я думаю о чем-то вроде этого:

public class BindableCompositeCollection : FreezableCollection<object>, ICollectionViewFactory

Если у кого-то есть выбор получше, я бы хотел его услышать!

Ответы на вопрос(1)

Ваш ответ на вопрос