0

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

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

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

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

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

任何有关如何调试的提示都值得赞赏。谢谢。

4

1 回答 1

3

在调试数据绑定问题时,我经常在 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 事件是否被触发。如果不是,那么我怀疑您的控件验证失败。

我希望这可以帮助您调试。

干杯

于 2013-11-06T19:32:08.717 回答