【发布时间】:2010-10-05 20:06:01
【问题描述】:
在 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 实例列表,其中一个为空。我已将窗口绑定到 Foo 的一个实例,并且 ComboBox 正在显示其 Bar 属性的值。
当我运行这个应用程序时,ComboBox 以空显示开始,因为 Foo.Bar 默认为空。没关系。如果我使用鼠标将 ComboBox 放下并选择“Hello”项目,那也可以。但是,如果我尝试重新选择列表顶部的空项目,ComboBox 将关闭并返回到之前的“Hello”值!
使用箭头键选择空值按预期工作,并且以编程方式设置它也可以工作。它只是用不起作用的鼠标进行选择。
我知道一个简单的解决方法是拥有一个表示 null 的 Bar 实例并通过 IValueConverter 运行它,但是有人可以解释为什么用鼠标选择 null 在 WPF 的 ComboBox 中不起作用吗?
【问题讨论】:
-
这与我的问题有关:stackoverflow.com/questions/422078/…
-
如何用方向键选择空值?箭头指向它并关闭标签,还是箭头指向它并按 Enter?有区别吗?
-
箭头键工作正常,无论我如何离开控件。鼠标根本不允许选择空值。这似乎是一个仅限鼠标的限制。
-
我偶然发现了完全相同的问题。不幸的是,代表
null的Bar实例对我来说不是一个可行的解决方案,因为我的对象无法“在空中”实例化(它们在构造函数中向所有者对象注册),因此我无法创建任何其他实例.尽管如此,为这个问题 +1。
标签: wpf data-binding combobox