【问题标题】:OnValidation databinding unexpected behaviour验证数据绑定意外行为
【发布时间】:2013-11-06 12:52:24
【问题描述】:

我正在使用这行代码将我的 TextBox 控件数据绑定到我的对象。

textBox1.DataBindings.Add("Text", myObject, "Text", false, DataSourceUpdateMode.OnPropertyChanged);

它按预期工作。但是,如果我将更新模式更改为 OnValidation,则数据绑定仅以 Object->Control 的一种方式工作。这意味着如果我在验证时在文本框中键入任何内容,则该值将重置为对象 Text 属性的值。反之亦然。

我曾尝试在测试项目中复制此问题,但失败了。所有“更简单”的版本都按预期工作。

我可以说的是 INotifyPropertyChanged 属性是在抽象类中实现的。我的对象继承了该类。此外,在运行时创建 TextBox 控件并进行数据绑定,然后将其添加到表单中。我已经在我的测试项目中尝试了所有这些并且它有效,所以我在这里遗漏了一些东西。

感谢任何有关如何调试此问题的提示。谢谢。

【问题讨论】:

  • 如果出现一些奇怪的问题,DataBinding 很难调试,抱歉。这是使用绑定时最烦人的事情之一(winformswpf

标签: c# winforms data-binding


【解决方案1】:

在调试数据绑定问题时,我经常在 Binding.Parse 和 Binding.Format 事件上添加处理程序:

    Binding b = new Binding("Text", myObject, "Text", false, DataSourceUpdateMode.OnValidation);
    b.Format += new ConvertEventHandler(formatHandler);
    b.Parse += new ConvertEventHandler(parseHandler);
    textBox1.DataBindings.Add(b);
    private void formatHandler(object sender, ConvertEventArgs e)
    {
        //put code and breakpoint here to inspect e.Value
    }

    private void parseHandler(object sender, ConvertEventArgs e)
    {
        //put code and breakpoint here to inspect e.Value
    }

Parse 事件在控件的绑定值更改并被推送到基础数据源时触发。在您的情况下,这只会在控件验证时发生。

当底层数据源发生变化并且需要将值推送到控件时会触发 Format 事件。

首先,您可以检查 Parse 事件是否被触发。如果不是,那么我怀疑您的控件验证失败。

希望对你调试有帮助。

干杯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2013-08-03
    相关资源
    最近更新 更多