Dlaczego CompositeCollection nie jest Freezable?

Piszę aplikację za pomocą wzorca MVVM. Dostarczam dane do mojego widoku, ustawiając właściwość DataContext mojego widoku na instancję mojego ViewModel. Generalnie używam stamtąd Binding i przechodzę dalej.

Ostatnio próbowałem zaimplementować ComboBox z „dodatkowym” elementem poza kolekcją, którą zapewnia mój ViewModel z napisem „Wybierz element”.

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

Problem polega na tym, że CompositeCollection nie jest Freezable:Przegląd obiektów zamrożonych. Powoduje to, że pojawia się tylko statyczny ComboBoxItem i żaden z wyników z mojego wyrażenia wiązania.

Moją pierwszą reakcją na ten problem była implementacja własnej wersji CompositeCollectionbyło Freezable. To jednak rodzi następujące pytanie:

Dlaczego CompositeCollection nie jest w ogóle Freezable?

Obawiam się, że ogólnie te decyzje są podejmowane z jakiegoś powodu i nie wydaje mi się, żebym wiedział wystarczająco dużo o Freezable, by powiedzieć, dlaczego nie odziedziczyli po nim. Wiem, że mogę wdrożyć tę kolekcję, ale obawiam się, że jeśli to zrobię, wystąpi wymierna różnica w wydajności.

Każda pomoc byłaby doceniana. Dzięki!

Ponadto: zauważ, że zdaję sobie sprawę, że mogę wstawić wartość Null lub inną specjalną wartość i podać oraz szablon lub cennik do zrobienia tego, co chcę. To nie jest pytanie, które mnie interesuje ... tylko pogrubione pytanie powyżej.

Aktualizacja:

Po kilku dalszych badaniach przeprowadzonych przez komentarz ArsenMkrt, jestem przekonany, że to było przeoczenie. Dowody są następujące:

Jest taka kolekcjajest zamrożone wywołaneFreezableCollection<T>. Nie produkuję CollectionViews, co czyni go nieodpowiednim dla moich potrzeb bezpośrednio.Sam Bent z MSFT mówi tak samo w powyższym linku. Nie mogę jeszcze znaleźć dla niego danych kontaktowych, ale planuję omówić to z nim, jeśli będę miał szansę.

Mój obecny plan obejścia tego problemu polega na stworzeniu nowej kolekcji o właściwościach CompositeCollection iFreezableCollection<T>. Nie wiem, czy to jeszcze zadziała, ale myślę o czymś takim:

public class BindableCompositeCollection : FreezableCollection<object>, ICollectionViewFactory

Jeśli ktoś ma lepszą opcję, chciałbym to usłyszeć!

questionAnswers(1)

yourAnswerToTheQuestion