我正在使用MVVM模式编写一个应用程序。通过将视图的DataContext属性设置为我的ViewModel实例,我向视图提供数据。通常情况下,我只是使用绑定并继续进行操作。
最近,我尝试使用ComboBox,并希望在ViewModel提供的集合之外增加一个称为“Select Item”的“额外”元素。
<ComboBox>
<ComboBox.ItemsSource>
<CompositeCollection>
<ComboBoxItem IsEnabled="False">Select Item</ComboBoxItem>
<CollectionContainer Collection="{Binding MyItemsCollection}" />
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
问题在于,CompositeCollection不是一个可冻结对象(Freezable):Freezable Objects Overview。这导致只有静态的ComboBoxItem显示,而没有来自我的绑定表达式的任何结果。我的初步反应是实现我的自己的CompositeCollection版本,并使其成为可冻结对象。但是,这引出了以下问题:
为什么CompositeCollection本身不是Freezable?
我担心通常这些决策都有其原因,而我对Freezable不太了解,无法说出它们为什么没有从中继承。我知道我可以实现这个集合,但是如果我这样做,性能上可能会有明显的差异。
任何帮助将不胜感激。谢谢!
public class BindableCompositeCollection : FreezableCollection<object>, ICollectionViewFactory
如果有更好的选项,我想听听!