将空字符串绑定到组合框
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 时替换任何值。
我不确定为什么会这样 在 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 时替换任何值。