向有界组合框添加空项
本文关键字:添加 组合 | 更新日期: 2023-09-27 18:17:22
我需要在wpf mvvm应用程序中的有界组合框中添加一个空项,我尝试了这个
<ComboBox TabIndex="23" Text="{Binding Specialisation}" DisplayMemberPath="refsp_libelle">
<ComboBox.ItemsSource>
<CompositeCollection >
<ComboBoxItem > </ComboBoxItem>
<CollectionContainer Collection="{Binding SpecialisationItemSource}" ></CollectionContainer>
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
在我尝试添加空项之前,它已经工作了。
<ComboBox TabIndex="23" Text="{Binding Specialisation}" ItemsSource="{Binding SpecialisationItemSource}" DisplayMemberPath="refsp_libelle"/>
所以我需要知道:
- 我犯的错误是什么?
- 我该如何修复它?
谢谢,
为什么你的方法不起作用?
您使用{Binding SpecialisationItemSource}
,由于没有显式定义绑定的源,因此退回到使用目标的DataContext
作为源-或者更确切地说,如果CollectionContainer
是FrameworkElement
,则它不是。因此,绑定的源是null
,组合中没有显示任何项。您需要显式地设置绑定的Source
属性才能使其工作(设置RelativeSource
或ElementName
也不会工作)。
实际上,即使 如何修复? 为了使用"隐式绑定",您可以在资源字典中放置 请注意,我使用了CollectionContainer
是 FrameworkElement
它仍然不会工作,因为 CompositeCollection
不是 FrameworkElement
(它甚至不是 DependencyObject
),所以数据上下文继承将被打破)。CollectionViewSource
,并使用StaticResource
扩展来填充集合容器:<ComboBox>
<ComboBox.Resources>
<CollectionViewSource x:Key="Items" Source="{Binding SpecialisationItemSource}" />
</ComboBox.Resources>
<ComboBox.ItemsSource>
<CompositeCollection>
<TextBlock />
<CollectionContainer Collection="{Binding Source={StaticResource Items}}" />
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
Collection="{Binding Source={StaticResource Items}}"
而不是Collection="{StaticResource Items}"
——这是因为CollectionViewSource
类型的对象不是一个实际的集合,也不是CollectionContainer.Collection
属性的有效值,绑定机制被设计成将其转换为一个实际的集合。另外,我用一个空的TextBlock
替换了一个空的ComboBoxItem
,因为前者会导致绑定错误,这是我非常不喜欢看到的。最后,我甚至会将其替换为绑定集合的项类型的默认值。