Dans WPF, il semble impossible de sélectionner (avec la souris) une valeur "nulle" dans une ComboBox. Modifier Pour clarifier, il s'agit de .NET 3.5 SP1.
Voici un peu de code pour montrer ce que je veux dire. D'abord, les déclarations en C# :
public class Foo
{
public Bar Bar { get; set; }
}
public class Bar
{
public string Name { get; set; }
}
Ensuite, mon XAML de Window1 :
<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>
Et enfin, ma classe 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();
}
}
Avec moi ? J'ai une ComboBox dont les éléments sont liés à une liste d'instances de Bar, dont l'une est nulle. J'ai lié la fenêtre à une instance de Foo, et la ComboBox affiche la valeur de sa propriété Bar.
Lorsque je lance cette application, la ComboBox démarre avec un affichage vide car Foo.Bar est nul par défaut. Cela ne pose aucun problème. Si j'utilise la souris pour faire descendre la ComboBox et sélectionner l'élément "Hello", cela fonctionne également. Mais si j'essaie de resélectionner l'élément vide en haut de la liste, la ComboBox se ferme et revient à sa valeur précédente, à savoir "Hello" !
La sélection de la valeur nulle à l'aide des touches fléchées fonctionne comme prévu, et son paramétrage par programme fonctionne également. C'est seulement la sélection avec la souris qui ne fonctionne pas.
Je sais qu'une solution de contournement facile consiste à avoir une instance de Bar qui représente null et à la faire passer par un IValueConverter, mais quelqu'un peut-il expliquer pourquoi la sélection de null avec la souris ne fonctionne pas dans la ComboBox de WPF ?