2010-10-23 84 views
0

我有一個奇怪的現象:的PropertyChanged沒有發射

在.NET CF項目

還有一類(稱爲A),它具有以下結構:

public partial class A: Form, INotifyPropertyChanged 
{ 
//for simplicity stripping off everything unrelated to this problem 

     private int _SelectedRowsCount = 0; 
     public int SelectedRowsCount 
     { 
      get { return _SelectedRowsCount; } 
      set 
      { 
       _SelectedRowsCount = value; 
       OnPropertyChanged("SelectedRowsCount"); 
      } 
     } 

     public bool enableCollectionButton 
     { 
      get { return SelectedRowsCount > 0; } 
     } 

//.... 
// 
// 


     void SomeMethod() 
{ 
//for simplicity: 
SelectedRowsCount = 1; //<- HERE NOT FIRING Propertychanged for enableCollectionButton 
} 
} 

類正確地實現了INotifyPropertyChanged的接口,使SelectedRowsCount屬性觸發屬性更改通知(我使用調試器對此進行了評估)。 的enableCollectionButton屬性數據綁定到一定的控制,像這樣:

someButton.DataBindings.Add("Enabled", this, "enableCollectionButton"); 

但enableCollectionButton屬性不會更改(儘管這取決於SelectedRowsCount的值)。此屬性應該在SelectedRowsCount屬性的更改上進行評估,但不是!

爲什麼這不起作用,我怎麼想?

在此先感謝

回答

0

試試這個

public partial class A: Form, INotifyPropertyChanged 
{ 
//for simplicity stripping off everything unrelated to this problem 

    private int _SelectedRowsCount = 0; 
    public int SelectedRowsCount 
    { 
     get { return _SelectedRowsCount; } 
     set 
     { 
      _SelectedRowsCount = value; 
      OnPropertyChanged("SelectedRowsCount"); 
      OnPropertyChanged("enableCollectionButton"); //This changes too ! 
     } 
    } 

    public bool enableCollectionButton 
    { 
     get { return SelectedRowsCount > 0; } 
    } 
} 

會發生什麼事是你要綁定到enableCollectionButton財產,但你不通知的變化BindingManager的到enableCollectionButton,而的更改爲SelectedRowsCount。 BindingManager不知道它們是相關的!

同時嘗試使用Microsoft's naming conventionsenableCollectionButton應該是EnableCollectionButton

+0

非常感謝!我怎麼能負責嗎?!我應該去散步!!哈哈!是的,你是關於命名約定(通常我遵守約定)!非常感謝 – 2010-10-24 08:59:22

+0

不客氣! – 2010-10-24 09:13:32