.net Winforms数据绑定挑战

.net Winforms数据绑定挑战,.net,winforms,data-binding,.net,Winforms,Data Binding,我有两个公式 a = sqrt ( b ) 这是相反的 b = a ^ 2 我想要两个编辑框,其中一个编辑框的值为a,另一个编辑框的值为b。如果我手动编辑其中一个编辑框,则另一个编辑框将根据上述公式进行更新。为了使问题更加棘手,编辑框应限制为仅显示两位小数,并且只有在按下enter键或在当前编辑的文本框上失去焦点后,才应激活另一个文本框的更新。也不可能在中输入无效值(无数字) 单独来看,每个小部分似乎都不成问题,但将所有需求捆绑在一起,我就是想不起来 注意:a和b的值应该是某些对象上的数据绑

我有两个公式

a = sqrt ( b )
这是相反的

b = a ^ 2
我想要两个编辑框,其中一个编辑框的值为a,另一个编辑框的值为b。如果我手动编辑其中一个编辑框,则另一个编辑框将根据上述公式进行更新。为了使问题更加棘手,编辑框应限制为仅显示两位小数,并且只有在按下enter键或在当前编辑的文本框上失去焦点后,才应激活另一个文本框的更新。也不可能在中输入无效值(无数字)

单独来看,每个小部分似乎都不成问题,但将所有需求捆绑在一起,我就是想不起来


注意:a和b的值应该是某些对象上的数据绑定属性。

如果双重更新给您带来了问题

private double? a;
private double? b;
public double? A
{
    get
    {
        return a;
    }
    set
    {
        if (a == value) return;
        a = value;
        if (a == null) b = null; else b = a * a;
        NotifyPropertyChanged("A");
        NotifyPropertyChanged("B");
    }
}

public double? B
{
    get
    {
        return b;
    }
    set
    {
        if (b == value) return;
        b = value;
        if (b == null) b = null; else a = Math.Sqrt((double)b);
        NotifyPropertyChanged("A");
        NotifyPropertyChanged("B");
    }
}

不,双重更新并没有给我带来问题。正是整个方案带来了问题。稍后我将添加一些代码示例。我没有把它们放在手边,为什么我把问题贴在手边。然而,我的问题是,我正在使用parse和format事件将格式设置为小数点后2位,每次我在编辑框中点击一个键,它就会立即处理它,进行绑定,触发一个解析事件,然后触发一个格式化事件,并重新格式化我正在编辑的字段,我失去了插入位置。虽然现在我认为这段代码是一些遗留代码库的一部分,可能存在一些令人讨厌的额外键处理,我不认为这会给我带来问题。