【问题标题】:Combobox with null value - SelectedItem binding具有空值的组合框 - SelectedItem 绑定
【发布时间】:2010-03-03 10:26:59
【问题描述】:

我想要一个带有城市选项的组合框可供选择,其中一个选项是空选项(没有城市)。 itemsource 绑定到“City”对象列表。 List 包含 null 值以表示一个空选项。 SelectedItem 绑定到“City”类型的属性。除了在组合框中选择空选项的情况外,一切正常。绑定到 SelectedItem 的属性不会使用 null 值更新,而是保留之前的选择。我该如何解决这个问题?

谢谢你的回答 格雷格

【问题讨论】:

    标签: silverlight combobox null


    【解决方案1】:

    这不是我的经验。我有以下 XAML:

    <TextBlock Text="{Binding ElementName=_cbx, Path=SelectedItem}" Margin="20" />
    <ComboBox x:Name="_cbx" ItemsSource="{Binding Cities}" HorizontalAlignment="Left" SelectionChanged="OnNewCity" />
    

    我在代码隐藏中创建了一个名为 Cities 的属性作为 List 并用字符串和空值填充它。 选择 null 时,SelectedItem 为 ComboBoxItem。

    在 OnNewCity 中,我根据 SelectedItem 填充另一个文本框,我看到了相同的行为。

    您能否提供有关您的 XAML 和代码的更多信息?

    在作者评论后编辑:

    感谢您提供 XAML。我使用了同一个,使用 City 类而不是字符串列表,我得到了和你一样的行为。 SelectedCity 中的断点显示未调用 setter。 当 City 对象为 null 时,SelectedItem 属性的类型为 ComboBoxItem,因此我的猜测是 WPF 会查找与 ComboBoxItem 兼容的类型的 SelectedCity 属性以调用设置器。在这种情况下它找不到一个。 我将代码隐藏更改为设置对象类型的 SelectedCity。在这种情况下,即使是空城市,也会调用 setter!

    我不确定更改 SelectedCity 的类型是一个好方法。不应过度使用类型对象。但是您可以拥有另一个仅用于绑定(和对象类型)的属性,该属性在类型检查后正确设置 SelectedCity。

    另一个更好的解决方案是考虑将空城市放入绑定列表是否有意义。你能把它去掉或者有一个特殊的城市,它有一个特殊的名字来代表 null 吗?

    【讨论】:

    • 这是我使用它的方式,Cities 是客户类型“City”的对象列表" 加上 null 值和属性 SelectedCity 也是类型“City”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    相关资源
    最近更新 更多