具有空值的组合框 - SelectedItem绑定

时间:2010-03-03 10:26:59

标签: silverlight combobox null

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

谢谢你asnwer 格雷格

1 个答案:

答案 0 :(得分:0)

这不是我的经历。我有以下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属性以调用setter。在这种情况下找不到一个。 我改变了我的代码隐藏,设置了类型为object的SelectedCity。在这种情况下,即使对于空城市,也会调用setter!

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

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