将空字符串绑定到组合框

时间:2015-11-19 21:47:23

标签: wpf combobox wpf-controls

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

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

在后面的代码中,我有

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

当我加载UI时,组合框具有空集。现在,如果我将其更改为&#34; Test1&#34;,我没有选择恢复为null。在用户界面,我看到&#34; Test1&#34;,&#34; Test2&#34;和&#34; Test3&#34;。空字符串不会在组合框中创建新条目。在我的例子中,null是一个有效的选项。如果我将null更改为,它可以正常工作。但我需要null才能显示为有效选项。 有没有人看到这种行为?

2 个答案:

答案 0 :(得分:1)

我通常使用类似&#34的字符串值;没有选择&#34;用户显示而不是null。 这可以避免您遇到的问题,并且对用户来说更清楚。

在向数据库发送内容之前,我重新翻译了#34;没有选择&#34;为空。

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

通常这个&#34;没有选择&#34;文本甚至被本地化并存储在资源文件中,因此它适用于不同语言的用户。

答案 1 :(得分:1)

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

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 as

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

因此,您无需在加载/保存时替换任何值。