将空字符串绑定到组合框

Bind null string to combobox

我不确定为什么会这样 在 XAML,我有

<ComboBox x:Name="cb" HorizontalAlignment="Left" VerticalAlignment="Top" Width="140" Height="25"/>

在后面的代码中,我有

cb.ItemsSource = new string[] { null, "Test1", "Test2", "Test3" };

当我加载 UI 时,组合框设置为空。现在,如果我将其更改为 "Test1",我将无法恢复为 null。在 UI,我看到 "Test1"、"Test2" 和 "Test3"。空字符串不会在组合框中创建新条目。就我而言,null 是一个有效选项。如果我将 null 更改为 ,它工作正常。但我需要将 null 显示为有效选项。 有没有人看到这种行为?

我通常使用像 "no selection" 这样的字符串值来显示用户,而不是 null。 这样就避免了你遇到的问题,对用户来说更清楚。

在将内容发送到数据库之前,我将 "no selection" 重新翻译为 null。

如果我绑定到复杂的项目,我也会创建一个代表 null 的项目。

通常这个 "no selection" 文本甚至被本地化并存储在资源文件中,因此它适用于不同语言的用户。

不要绑定到字符串数组,而是使用对象数组。

public class DisplayValuePair
    {
        public DisplayValuePair(string d, string v) { this.Display = d; this.Value = v; }
        public string Display { get; set; }
        public string Value { get; set; }
    }

并将数据绑定为

cb.ItemsSource = new DisplayValuePair[] { 
                new DisplayValuePair("", null), 
                new DisplayValuePair("Test1", "Test1"), 
                new DisplayValuePair( "Test2", "Test2" ), 
                new DisplayValuePair( "Test3", "Test3" ) };

和 xaml 作为

<ComboBox x:Name="cb" HorizontalAlignment="Left" VerticalAlignment="Top" DisplayMemberPath="Display" SelectedValuePath="Value" Width="140" Height="25"/>

因此,您不需要在 load/save 时替换任何值。