我想有一个可以选择城市选项的组合框,其中一个选项是空选项(没有城市)。 itemsource绑定到“City”对象列表。 List包含空值以表示空选项。 SelectedItem绑定到“City”类型的属性。除了在组合框中选择空选项的情况之外,一切都有效。绑定到SelectedItem的属性不会使用null值更新,而是保留先前的选择。我怎么能解决这个问题?
谢谢你asnwer 格雷格
答案 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的特殊名称吗?