2009-12-09 33 views
1

我有一個簡單的複選框WPF複選框綁定 - 在屬性設置改變值不會影響UI

<CheckBox IsChecked="{Binding ForceInheritance}"/> 

在代碼中,我有一個類「INotifyPropertyChanged的」和物業

public bool ForceInheritance 
{ 
    get { return forceInheritance; } 

    set 
    { 
    if (forceInheritance != value) 
    { 
     value = SomeTest(); 

     if (forceInheritance != value) 
     { 
     //something is done here. 
     } 

     OnPropertyChanged("ForceInheritance"); 
    } 
    } 
} 

如果SomeTest ()返回!值,因此底層數據不必更改CheckBox仍會更改其IsChecked狀態。

例如:
ForceInheritance是假的。
複選框被點擊。
SomeTest()返回false。
- >底層數據沒有變化
- >我希望CheckBox保持未選中
CheckBox被檢查。

我能做些什麼來改變不了CheckBox的狀態器isChecked當二傳手實際上並沒有改變價值?

我想到了 「OnPropertyChanged(」 ForceInheritance 「);」會做的伎倆,但它沒有。

謝謝你的時間。

回答

1

發生此問題是因爲當您單擊複選框時,值已更改。然後綁定導致屬性集。在那裏你操作它的值,並希望調用OnPropertyChanged將導致更新複選框值的反向綁定操作。但不起作用,因爲更新屬性後更新控件可能會產生無限更新循環。爲了防止這個PropertyChanged被忽略。

你可以做什麼是你的財產setter方法的一些邏輯移動到綁定驗證規則。您可以閱讀關於驗證規則的here,或者在需要更多信息或示例時留下評論。

希望它有幫助。

+0

您好!我認爲OnPropertyChanged()會再次觸發getter而不是setter。 但是,謝謝你的回答,它使我找到了解決辦法。 建議使用驗證。 當setter沒有改變基礎值時,我創建了一個錯誤消息。 當返回Validation errormessage時,刪除errormessage並調用OnPropertyChanged()。 - >使用正確的值調用getter - > CheckBox保持未選中狀態。 – user227882 2009-12-09 14:33:42