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();
}
}
私と一緒に?項目が Bar インスタンスのリストにバインドされている ComboBox があり、そのうちの 1 つは null です。ウィンドウを Foo のインスタンスにバインドし、ComboBox はその Bar プロパティの値を表示しています。
このアプリを実行すると、デフォルトで Foo.Bar が null であるため、ComboBox は空の表示で開始されます。それはいいです。マウスを使用して ComboBox をドロップダウンし、「Hello」項目を選択すると、それも機能します。しかし、リストの一番上にある空の項目を再度選択しようとすると、ComboBox が閉じて、以前の値の "Hello" に戻ります!
矢印キーで null 値を選択すると期待どおりに機能し、プログラムで設定することもできます。動作しないのはマウスで選択することだけです。
簡単な回避策は、null を表す Bar のインスタンスを作成し、それを IValueConverter で実行することだとわかっていますが、マウスで null を選択しても WPF の ComboBox で機能しない理由を誰かが説明できますか?