2012-06-16 38 views
1

我目前正在爲Windows Phone構建一個測量單位轉換應用程序。設置我的用戶界面後,我將數據綁定添加到兩個文本框中,每個顯示一個測量。 (例如華氏<->攝氏度)測量單位轉換+數據綁定

到目前爲止,這麼好。但是,當我部署我的應用程序時,我遇到了循環依賴。每當我更新一個值時,轉換函數被調用,另一個單元被更新。因此,它的值會導致轉換函數再次運行。

我該怎麼做才能避免這種依賴性?我認爲它比實際的編程更具概念性。由於

示例代碼

private float _fahrenheit; 
    private float _celsius; 

    public float Fahrenheit { 
     get { return _fahrenheit; } 
     set { 
      _fahrenheit = value; 
      FahrenheitToCelsius(); 
     } 
    } 

    public float Celsius 
    { 
     get { return _celsius; } 
     set 
     { 
      _celsius = value; 
      CelsiusToFahrenheit(); 
     } 
    } 

    private void CelsiusToFahrenheit() 
    { 
     Fahrenheit = _celsius * 1.8f + 32.0f; 
    } 

    private void FahrenheitToCelsius() 
    { 
     Celsius = ((_fahrenheit - 32.0f) * 5.0f)/9.0f; 
    } 
+0

您可以通過引用傳遞值,因爲每當它更新它時,它只會更新原始值。 –

回答

1

我會選擇其中一個作爲您的基地。另一個將永遠是這個轉換。我們通過公制轉換爲我們的應用程序執行此操作。所有值均以公制存儲,但您可以顯示公制或英制。如果您打算使用攝氏溫度作爲您的基準,它會看起來像這樣:

private float _celsius; 

public float Fahrenheit { 
    get { return _celsius * 1.8f + 32.0f } 
    set 
    { 
     float cels = (((value - 32.0f) * 5.0f)/9.0f); 
     if (cels != _celsius) 
     { 
      _celsius = cels; 
      TempPropertiesChanged(); 
     } 
    } 
} 

public float Celsius 
{ 
    get { return _celsius; } 
    set 
    { 
     if (value != _celsius) 
     { 
      _celsius = value; 
      TempPropertiesChanged(); 
     } 
    } 
} 

private void TempPropertiesChanged() 
{ 
    OnPropertyChanged("Fahrenheit"); 
    OnPropertyChanged("Celsius"); 
} 
+0

工程就像一個魅力。謝謝。 – Tom

1

不要在這兩種方法使用setter方法,而是直接寫入值的實例字段。它實際上比編程概念更重要。