当绑定数据源更改时,控件不更新?

3

如果已经有人问过这个问题,我很抱歉但是我找不到。 我正在尝试将一个文本框绑定到数据源,但是当数据源更改时文本框没有更新... 这是我的代码,有人能建议我哪里做错了吗? 谢谢!

public Controller()
{
            myForm.databaseTextBinding = new Binding("Text", ac, "connString");
        myForm.databaseTextBinding.ControlUpdateMode = ControlUpdateMode.OnPropertyChanged;

        myForm.setupSources();
}

public partial class Form1 : Form
{

    public Binding databaseTextBinding;


    public void setupSources()
    {
        DatabaseTextBox.DataBindings.Add(databaseTextBinding);

    }
}

更新:

我现在可以创建能够更新的文本框。但新的问题出现了。数据源本身通过我创建一个新的AC对象进行更改。但是如果我这样做,绑定将不再更新。考虑过可能属性未改变,但我确定它已经改变了!

例如,这个有效。

ac.cString = "ABC";
ac.cString = "DEF"; 

但这并不意味着...

ac = new AccessConnector(path);
ac.cString = "ABC"; 
ac.cString = "DEF";
2个回答

4

绑定的对象类型(即ac)是否实现了INotifyPropertyChanged? 如果是,当更改“connString”属性时,该属性是否引发PropertyChanged事件?

如果没有实现,您可以查看INotifyPropertyChanged示例

编辑:

部分不起作用是因为您没有将绑定更改为新对象-它仍然绑定到旧对象。 当您将新对象分配给引用变量ac时,对原始对象的绑定不会更改-因此它仍然指向以前的对象。


尽管这个答案的年代已久,但如果你忠实地添加了public event PropertyChangedEventHandler PropertyChanged;PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(MyProperty)));,却忘记在类定义中添加: INotifyPropertyChanged,仍然很容易被这个问题困扰。别问我怎么知道的 :) - amonroejj

2

假设您的BindingBindingSource绑定到文本框,您需要在代码中添加BindingSource.ResetBindings()


不,我没有使用绑定源,我应该使用吗? - user2666350
不是必需的,但它们确实有助于WinForms编程。 - Monty Wild

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接