2011-10-20 191 views
0

說我有一些屬性如何創建一個計算屬性

public int redBalls { get; set; } 
public int blueBalls { get; set; } 

我現在想有一個totalBalls財產,將增加兩個。

,我會這樣做嗎?

public int totalBalls { get { return redBalls + blueBalls; } } 

我想這一點,但結果是0

*編輯,我已經說出我的主要開發者,它是因爲無論訪問totalBalls不通知的redBalls或blueBalls的變化,使它不會重新計算這些值

所以我必須做OnPropertyChanged("total")

+1

你真的設置了'redBalls'和'blueBalls'嗎? –

+0

一切都很好,看起來像兩個紅色/藍色球0 – sll

+1

'redBalls'和'blueBalls'都不是零,而不是對方的反轉,對不對? –

回答

0

沒有什麼不對您的代碼,除了屬性名的大小寫,這是純粹的化妝品。

totalBalls將= 0同時的redBallsblueBalls的總和爲0,很明顯,他們都將= 0,直到它們被設定爲其他值。

編輯

你沒有提到DependecyProperty S IN的OP或標籤,如果dependecy屬性綁定到totalBalls財產也不會知道totalBalls從其他屬性計算。

,以便其元數據包括PropertyChangedCallback可以檢測聚集的變化,而不是你簡單的類聯接到WPF你應該延長您的依賴項屬性的定義。

+1

我認爲根據使用情況不需要** Total **屬性。 –

+0

@Ramhound - 同意。除非有理由讓紅色/藍色球私密並提供總計,否則目前是膨脹的。 – Didaxis

+0

不要擔心膨脹,這只是我給你描述的問題,而不會粘貼太多不相關的代碼。 –

0

您必須設置實際上可以redBalls/blueBalls的價值

class Balls 
{ 
    public int redBalls { get; set; } 
    public int blueBalls{ get; set; } 

    public int totalBalls{ get{ return redBalls + blueBalls; } } 
} 

void test() 
{ 
    // You must acutally set the value of redBalls/blueBalls 
    var balls = new Balls{ redBalls = 1, blueBalls = 2 }; 
    Assert.AreEqual(3, balls.totalBalls); 
} 
1

寫了一個測試你...這個成功對我來說。

[Test] 
public void SO() 
{ 
    var testing = new Testing(); 
    Assert.AreEqual(0, testing.RedBalls); 
    Assert.AreEqual(0, testing.BlueBalls); 
    Assert.AreEqual(0, testing.TotalBalls); 

    testing.RedBalls = 2; 
    testing.BlueBalls = 4; 
    Assert.AreEqual(2, testing.RedBalls); 
    Assert.AreEqual(4, testing.BlueBalls); 
    Assert.AreEqual(6, testing.TotalBalls); 
} 

class Testing 
{ 
    public int RedBalls { get; set; } 
    public int BlueBalls { get; set; } 
    public int TotalBalls { get { return RedBalls + BlueBalls; } } 
} 
+0

謝謝,我遇到的問題是綁定時。 –