【问题标题】:Winforms data binding challengeWinforms 数据绑定挑战
【发布时间】:2012-09-10 19:54:18
【问题描述】:

我有两个公式。

a = sqrt ( b )

它是相反的

b = a ^ 2

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

单独每个小部分似乎都不是问题,但将所有要求捆绑在一起我就是无法理解。

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

【问题讨论】:

    标签: .net winforms data-binding


    【解决方案1】:

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

    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");
        }
    }
    

    【讨论】:

    • 不,双重更新不是给我带来问题的原因。问题在于整个包装。稍后我将添加一些代码示例。我手边没有它们,为什么我把问题贴在手边。但是对我来说问题是我正在使用解析和格式化事件将格式设置为小数点后 2 位,每次我在编辑框中按下一个键时,它都会立即处理它,进行绑定,触发解析事件并 然后一个格式事件并重新格式化我正在编辑的字段,我丢失了插入位置。
    • 虽然现在我认为这段代码是一些遗留代码库的一部分,并且可能有一些令人讨厌的额外密钥处理挂在我不希望它给我带来问题的地方。
    猜你喜欢
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多