在 WPF 中,似乎无法使用鼠标从 ComboBox 中选择“null”值。 编辑 为了澄清,这里是 .NET 3.5 SP1。
下面是一些代码来说明我的意思。首先是 C# 声明:
public class Foo
{
public Bar Bar { get; set; }
}
public class Bar
{
public string Name { get; set; }
}
接下来是我的Window1 XAML:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<StackPanel>
<ComboBox x:Name="bars"
DisplayMemberPath="Name"
Height="21"
SelectedItem="{Binding Bar}"
/>
</StackPanel>
</Window>
最后,我的Window1类:
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
bars.ItemsSource = new ObservableCollection<Bar>
{
null,
new Bar { Name = "Hello" },
new Bar { Name = "World" }
};
this.DataContext = new Foo();
}
}
跟上我了吗?我有一个 ComboBox,其选项绑定到 Bar 实例的列表,其中一个实例是 null。我已将窗口绑定到 Foo 的实例,并且 ComboBox 正在显示其 Bar 属性的值。
当我运行此应用程序时,ComboBox 从空显示开始,因为默认情况下 Foo.Bar 是 null。这很好。如果我使用鼠标将 ComboBox 放下并选择“Hello”项目,那也可以。但是,如果我尝试重新选择列表顶部的空项目,则 ComboBox 会关闭并返回其先前值“Hello”!
使用箭头键选择 null 值按预期工作,并且以编程方式设置它也可以正常工作。只有使用鼠标选择不起作用。
我知道一个简单的解决方法是拥有代表 null 的 Bar 实例并通过 IValueConverter 运行它,但是有人可以解释一下为什么在 WPF 的 ComboBox 中使用鼠标选择 null 值不起作用吗?
Bar
实例对我来说不是可行的解决方案,因为我的对象不能在“空中”实例化(它们在构造函数中向所有者对象注册自己),因此我无法创建任何额外的实例。尽管如此,还是要给这个问题点赞。 - O. R. Mapper