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;
    }
4

2 回答 2

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");
}
于 2012-06-17T01:39:53.473 回答
1

不要在两个方法中使用setter,而是直接将值写入实例字段。它实际上更像是一个编程的东西而不是一个概念的东西。

于 2012-06-16T22:55:36.120 回答