我有一个列表框绑定到ObservableDictionary(自定义类,为简洁而省略)类。除了对SelectedItem的绑定外,它工作得很好。我有以下属性绑定到ListBox的selectedItem。
public KeyValuePair<Bumpstop, BumpStopOptions> SelectedBumpstop
{
get
{
return this.selectedBumpstop;
}
set
{
this.selectedBumpstop = value;
this.OnPropertyChanged("SelectedBumpstop");
}
}
当我在列表框中选择一个项目时,它会命中set属性并且它可以正常工作。当我取消选择所有内容时,ListBox获取其周围的RedBorder,表明绑定失败,并且它没有像我期望的那样将SelectedBumpstop属性设置为null。为什么不将它设置为null?
答案 0 :(得分:1)
红色边框不是绑定失败(在VS输出框中发现绑定错误),它是验证失败。
绑定会自动检查绑定源类型的新值是否可接受(在本例中为KeyValuePair
)。没有选择值会将null
表示为选定值,这对KeyValuePair
无效 - 它是一个结构,它是值类型,因此不能具有null
值。因此验证失败,并且值未上载到源。
制作类型nullable(KeyValuePair<Bumpstop, BumpStopOptions>?
)会解决此问题,但它可能会对您的其他代码产生影响,因此请仔细考虑(您可能需要在使用该属性的地方添加无效性检查) )。