2010-12-17 95 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