将列表框中的SelectedItem绑定到KeyValuePair<>

时间:2011-10-06 18:21:26

标签: wpf data-binding

我有一个列表框绑定到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?

1 个答案:

答案 0 :(得分:1)

红色边框不是绑定失败(在VS输出框中发现绑定错误),它是验证失败。

绑定会自动检查绑定源类型的新值是否可接受(在本例中为KeyValuePair)。没有选择值会将null表示为选定值,这对KeyValuePair无效 - 它是一个结构,它是值类型,因此不能具有null值。因此验证失败,并且值未上载到源。

制作类型nullableKeyValuePair<Bumpstop, BumpStopOptions>?)会解决此问题,但它可能会对您的其他代码产生影响,因此请仔细考虑(您可能需要在使用该属性的地方添加无效性检查) )。