2010-12-17 92 views
1

我目前有一个复选框绑定到一个属性,该属性检查ObservableCollection的特定值。如果该值存在,则该属性返回true。WPF - 复选框是否绑定到ObservableCollection是否包含值?

我的财产和暴露ObservableCollection属性都是只读的。

这种方法在第一次加载我的模型时工作正常,但是当它向ObservableCollection中添加附加项时,绑定到属性的复选框不会更新。

下面是我的财产代码:

public bool IsMeasure11 
{ 
    get //readonly 
    { 
     return this.Charges.Any(t => t.IsMeasure11); 
    } 
} 

下面是我的ObservableCollection代码:为复选框

public ObservableCollection<DACharge> Charges 
{ 
    get //readonly 
    { 
     if (_charges == null) 
     { 
      _charges = new GenericEntityCollection<DACharge>(_DACase.Id).ToList().ToObservableCollection(); 
     } 

     return _charges; 
    } 
} 

而XAML:

<CheckBox Content="M11" Name="chkM11" IsChecked="{Binding IsMeasure11, Mode=OneWay}"> 

在此先感谢,
Sonny

回答

1

你的财产并不暗示INotifyPropertyChanged因此绑定引擎无法知道更新绑定属性。

ObservableCollection<T>不更新它正在返回的属性;在这种情况下public ObservableCollection<DACharge> Charges属性。

您将需要注册ObservableCollection.CollectionChanged事件,以及何时添加/删除某个项目等......激发PropertyChanged事件,如Charges属性的上一个链接中所示。

+0

宾果。这一个工作得很好。谢谢。 – 2010-12-17 21:59:58

1

收费集合发生变化时,您需要使IsMeasure11的绑定(即,调用INotifyPropertyChanged的PropertyChanged事件)无效。这样做的一种方法是订阅Charges集合的CollectionChanged事件。

// somewhere, maybe the constructor of your view model 
this.Charges.CollectionChanged += ChargesChanged; 

private void ChargesChanged(object sender, NotifyCollectionChangedEventArgs e) 
{ 
    this.NotifyOfPropertyChanged(() => IsMeasure11); 
} 
+0

+1。似乎与Aaron的答案相同(或相似)。 – 2010-12-17 22:00:23