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,但這似乎沒有什麼區別。這是這種情況下的預期行爲嗎?如果是這樣,是否有可能實現我描述的行爲?
什麼是你的綁定DataSourceUpdateMode,應該DataSourceUpdateMode.OnPropertyChanged。 – stuartd
你絕對正確。我使用設計器創建了所有綁定,並通過單擊相應的屬性來設置它們。所以我假設DataSourceUpdateMode.OnValidation是默認的,如果你不在設計器中使用「高級」DataBindings對話框,或者在代碼中設置綁定並指定它?無論如何,非常感謝您的快速回復。如果您想用此信息「回答」我的問題,我會很樂意接受併爲您提供讚賞。再次感謝你! – user685869
會做,謝謝。 – stuartd