В WPF кажется невозможным выбрать (с помощью мыши) «нулевое» значение в ComboBox. Редактировать Для пояснения, это .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»!
Выбор нулевого значения с помощью клавиш со стрелками работает, как ожидалось, и установка его программно также работает. Это только с помощью мыши, которая не работает.
Я знаю, что простой обходной путь - это создать экземпляр Bar, который представляет значение null, и запустить его через IValueConverter, но кто-то может объяснить, почему выбор нуля с помощью мыши не работает в ComboBox WPF?