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