【发布时间】:2021-10-01 15:52:21
【问题描述】:
我创建了一个在 XAML 中添加一个项目的 ComboBox,这样我就可以拥有一个不可编辑的 ComboBox,其中包含一个将绑定项目设置为 null 的选项。
以下代码有效,但 Visual Studio 报告了一些我不知道如何修复的 XAML 绑定失败。
<ComboBox x:Name="NewNewComboBox"
SelectedValuePath="CompCategoryId"
DisplayMemberPath="CategoryName">
<ComboBox.Resources>
<CollectionViewSource x:Key="MyCollection" Source="{Binding Categories}"/>
</ComboBox.Resources>
<ComboBox.ItemsSource>
<CompositeCollection>
<ComboBoxItem FontStyle="Italic" FontSize="8px" Content="(clear)" />
<CollectionContainer Collection="{Binding Source={StaticResource MyCollection}}" />
</CompositeCollection>
</ComboBox.ItemsSource>
<ComboBox.SelectedValue>
<Binding Path="CompCategoryId"/>
</ComboBox.SelectedValue>
</ComboBox>
注意:普通的 ComboBox(没有 (clear) 项)不会显示任何失败。
编辑:我希望解决方案避免特定于 ComboBox 使用的类的代码,因为我想将此 ComboBox 作为 UserControl 以便可以在不同的类(它们都有一个 int Id 和字符串 Name,已经由 SelectedValuePath 和 DisplayMemberPath 定义)
我已修改 ComboBoxItem 并且不再收到 XAML 绑定失败。但我无法编辑它的 FontStyle(而且我不知道如何将其实现为可重用的 UserControl)
<ComboBox x:Name="NewNewComboBox"
SelectedValuePath="CompCategoryId"
DisplayMemberPath="CategoryName"
SelectionChanged="NewNewComboBox_SelectionChanged">
<ComboBox.Resources>
<CollectionViewSource x:Key="MyCollection" Source="{Binding Categories}"/>
</ComboBox.Resources>
<ComboBox.ItemsSource>
<CompositeCollection>
<m:CompCategory CategoryName="(clear)" CompCategoryId="0"/>
<CollectionContainer Collection="{Binding Source={StaticResource MyCollection}}" />
</CompositeCollection>
</ComboBox.ItemsSource>
<ComboBox.SelectedValue>
<Binding Path="CompCategoryId"/>
</ComboBox.SelectedValue>
</ComboBox>
private void NewNewComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (NewNewComboBox.SelectedIndex == 0) NewNewComboBox.SelectedValue = null;
}
【问题讨论】:
-
阅读我的答案的补充。