2012-07-11 65 views
0

我需要更新綁定到屬性的TextBox。按照我已經實現的方式,它工作正常。下面的代碼更新綁定到屬性的文本框控件

private double foo; 

public double Foo 
{ 
    get { return foo; } 
    set 
    { 
    foo = value; 
    RaisePropertyChanged(() => Foo); 
    } 
} 

但現在我需要更新從其他屬性此屬性的值,並綁定到富的TextBox不會被更新。下面的代碼

private string foo1 

public string Foo1 
{ 
    get { return foo1; } 
    set 
    { 
    foo1 = value; 
    foo = 4; // Updating the Foo property indirectly 
    RaisePropertyChanged(() => Foo); 
    RaisePropertyChanged(() => Foo1); 
    } 
} 

我有義務,因爲Foo和其他財產被更新對方,所以我不能更新屬性直接,因爲我墜入無邊遞歸來更新屬性美孚在這樣的價值。

的問題是如何更新綁定到財產TextBox當我改變屬性FOO的價值?

回答

1

我會說你應該更新你的Foo1二傳手中的公共成員Foo。這將導致RaisePropertyChanged事件觸發Foo

private string foo1 

public string Foo1 
{ 
    get { return foo1; } 
    set 
    { 
    foo1 = value; 
    Foo = 4; 
    RaisePropertyChanged(() => Foo1); 
    } 
} 

你可以稱之爲RaisePropertyChanged(() => Foo);每當你更新你的私人領域foo,但除非有很好的理由不使用屬性Foo,我總是用它在fooset的意圖是讓該代碼在屬性值發生更改時運行。在我看來,設置私人領域繞過set代碼違反了這個意圖。

編輯

在另一方面,如果你只是想打電話RaisePropertyChanged和改變Foo值時Foo1(每個setter方法被調用時不一定)改變,只需添加一個檢查,看看如果該值已更改。這將處理您的遞歸問題。

set 
{ 
    if(foo1 != value) 
    { 
     foo1 = value; 
     Foo = 4; 
     RaisePropertyChanged(() => Foo1); 
    } 
} 
+0

就像我在帖子中說,我不能更新屬性直接,因爲屬性更新另一個屬性Foo1和Foo1更新美孚所以,我唯一的選擇是更新這兩個屬性的屬性,並以某種方式更新綁定到每個屬性的TextBoxes – Michelle 2012-07-11 12:48:23

+0

您是否在'Foo' setter中更新'Foo1'? – 2012-07-11 12:51:32

+0

像你所說的「如果」解決了遞歸問題。謝謝你的幫助 – Michelle 2012-07-11 13:37:40

相關問題