2011-10-06 90 views
1

我有一个绑定到ObservableDictionary(自定义类,为简洁起见)类的列表框。除了SelectedItem上的绑定外,它工作得很好。我有以下属性绑定到ListBox的selectedItem。将列表框中的SelectedItem绑定到KeyValuePair <>

public KeyValuePair<Bumpstop, BumpStopOptions> SelectedBumpstop 
    { 
     get 
     { 
      return this.selectedBumpstop; 
     } 
     set 
     { 
      this.selectedBumpstop = value; 
      this.OnPropertyChanged("SelectedBumpstop"); 
     } 
    } 

当我在我的列表框中选择一个项目时,它击中了set属性并且它可以工作。当我取消选择所有的ListBox时,RedBorder会在其周围获得指示绑定失败的信息,并且它不会像我所期望的那样将SelectedBumpstop属性设置为null。为什么它没有设置为空?

回答

1

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

绑定会自动检查绑定源类型(本例中为KeyValuePair)的新值是否可接受。没有选定的值将意味着null作为选定值,这对于KeyValuePair无效 - 它是一种结构,它们是值类型,因此不能包含null值。所以验证失败并且该值不会上传到源代码中。

制作类型nullableKeyValuePair<Bumpstop, BumpStopOptions>?)会解决这个问题,但它可能会对其他代码产生影响,因此仔细考虑(您可能必须在使用属性的任何位置添加无效检查)。

+0

感谢您解释这一点。这def。回答了我的问题,你的修复工作很好。 – PlTaylor

相关问题