Warum kann CompositeCollection nicht eingefroren werden?

Ich schreibe eine Anwendung mit dem MVVM-Muster. Ich stelle meiner Ansicht Daten zur Verfügung, indem ich die DataContext-Eigenschaft meiner Ansicht auf eine Instanz meines ViewModel setze. Im Allgemeinen benutze ich nur die Bindung von dort und gehe meinen Weg.

Kürzlich habe ich versucht, eine ComboBox mit einem "zusätzlichen" Element jenseits der Sammlung zu implementieren, die mein ViewModel mit "Select Item" bereitstellt.

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

Das Problem ist, dass CompositeCollection kein Freezable ist:Übersicht über Freezable-Objekte. Dadurch wird nur das statische ComboBoxItem angezeigt und keines der Ergebnisse aus meinem Bindungsausdruck.

Meine erste Reaktion auf das Problem bestand darin, nur meine eigene Version von CompositeCollection zu implementierenwar Einfrierbar. Dies wirft jedoch die folgende Frage auf:

Warum ist CompositeCollection überhaupt kein Freezable?

Ich mache mir Sorgen, dass diese Entscheidungen im Allgemeinen aus einem bestimmten Grund getroffen werden und ich glaube nicht genug über Freezable zu wissen, um zu sagen, warum sie nicht von Freezable geerbt wurden. Ich weiß, dass ich diese Sammlung implementieren kann, aber ich befürchte, dass es einen messbaren Leistungsunterschied geben wird, wenn ich dies tue.

Jede Hilfe wäre dankbar. Vielen Dank!

Außerdem: Bitte beachten Sie, dass ich erkennen kann, dass ich eine Null oder einen anderen speziellen Wert einfügen und eine Vorlage oder einen Wertkonverter bereitstellen kann, um zu tun, was ich will. Dies ist nicht die Frage, die mich interessiert ... nur die Frage in Fettdruck oben.

Aktualisieren:

Nach einigen weiteren Nachforschungen, die durch den Kommentar von ArsenMkrt angestellt wurden, bin ich zu der Annahme gelangt, dass dies tatsächlich ein Versehen war. Der Beweis ist folgender:

Es gibt eine Sammlung, dieist Freezable genanntFreezableCollection<T>. Ich produziere keine CollectionViews, was es für meine Bedürfnisse direkt ungeeignet macht.Sam Bent von MSFT sagt dies auch im obigen Link. Ich kann noch keine Kontaktinformationen für ihn finden, habe aber vor, dies mit ihm zu besprechen, wenn ich die Gelegenheit dazu bekomme.

Mein aktueller Plan, um dieses Problem zu umgehen, ist das Erstellen einer neuen Sammlung mit den Eigenschaften von CompositeCollection undFreezableCollection<T>. Ich weiß noch nicht, ob es funktionieren wird, aber ich denke über so etwas nach:

public class BindableCompositeCollection : FreezableCollection<object>, ICollectionViewFactory

Wenn jemand eine bessere Option hat, würde ich es gerne hören!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage