2011-09-14 37 views
0

我在C#中有一個實現INotifyPropertyChanged幷包含幾個綁定屬性的業務對象。簡單地說,它看起來像這樣:從另一個綁定屬性的setter中設置綁定屬性的值

public class BusinessObject : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    private void OnPropertyChanged(PropertyChangedEventArgs e) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, e); 
     } 
    } 

    private int _intProperty; 
    public int IntProperty // bound to NumericUpDown control 
    { 
     get { return _intProperty; } 
     set 
     { 
      if (_intProperty == value) 
      { 
       return; 
      } 

      _intProperty = value; 
      OnPropertyChanged(new PropertyChangedEventArgs("IntProperty")); 

      // if IntProperty is > 10, then set BoolProperty to false 
      if (value > 10) 
      { 
       this.BoolProperty = false; 
       //OnPropertyChanged(new PropertyChangedEventArgs("BoolProperty")); 
      } 
     } 
    } 

    private bool _boolProperty; 
    public bool BoolProperty // bound to CheckBox 
    { 
     get { return _boolProperty; } 
     set 
     { 
      if (_boolProperty == value) 
      { 
       return; 
      } 

      _boolProperty = value; 
      OnPropertyChanged(new PropertyChangedEventArgs("BoolProperty")); 
     } 
    } 

正如你可以在二傳手的IntProperty看,我設置BoolProperty = false當IntProperty已經設置> 10. BoolProperty綁定到一個CheckBox我UI(winforms),但即使我設置BoolProperty = false,CheckBox不會更新以反映該更改,直到綁定到IntProperty的控件失去焦點。我想也許我需要在設置BoolProperty = false後調用OnPropertyChanged,但這似乎沒有什麼區別。這是這種情況下的預期行爲嗎?如果是這樣,是否有可能實現我描述的行爲?

+3

什麼是你的綁定DataSourceUpdateMode,應該DataSourceUpdateMode.OnPropertyChanged。 – stuartd

+0

你絕對正確。我使用設計器創建了所有綁定,並通過單擊相應的屬性來設置它們。所以我假設DataSourceUpdateMode.OnValidation是默認的,如果你不在設計器中使用「高級」DataBindings對話框,或者在代碼中設置綁定並指定它?無論如何,非常感謝您的快速回復。如果您想用此信息「回答」我的問題,我會很樂意接受併爲您提供讚賞。再次感謝你! – user685869

+0

會做,謝謝。 – stuartd

回答

1

您可能需要設置綁定的DataSourceUpdateModeDataSourceUpdateMode.OnPropertyChanged