gpt4 book ai didi

c# - 数据绑定(bind)文本框不反射(reflect)源更改

转载 作者:行者123 更新时间:2023-12-01 20:25:13 25 4
gpt4 key购买 nike

我需要 TextBox 来反射(reflect)数据绑定(bind)字符串的更改。我尝试了以下代码:

public partial class Form1 : Form
{
string m_sFirstName = "Brad";
public string FirstName
{
get { return m_sFirstName; }
set { m_sFirstName = value; }
}

public Form1()
{
InitializeComponent();

textBox1.DataBindings.Add("Text", this, "FirstName");
}

private void buttonRename_Click(object sender, EventArgs e)
{
MessageBox.Show("before: " + FirstName);
FirstName = "John";
MessageBox.Show("after: " + FirstName);
}
}

启动应用程序后,textBox1 会正确填充 Brad。我单击了按钮,它将名字重命名为“John”(第二个消息框确认了这一点)。但 textBox1 中仍然填充的是 Brad,而不是 John。为什么?是什么让这个工作成功?

最佳答案

DataBinding 未反射(reflect)您的更改的原因是您正在绑定(bind)一个简单的 System.String 对象,该对象未设计为在修改时引发事件。

所以你有两个选择。一种是在按钮的 Click 事件中重新绑定(bind)值(请避免!)。另一种是创建一个自定义类来实现 INotifyPropertyChanged,如下所示:

public partial class Form1 : Form
{
public Person TheBoss { get; set; }

public Form1()
{
InitializeComponent();

TheBoss = new Person { FirstName = "John" };

textBox1.DataBindings.Add("Text", this, "TheBoss.FirstName");
}

private void button1_Click(object sender, EventArgs e)
{
TheBoss.FirstName = "Mike";
}


public class Person : INotifyPropertyChanged
{
private string firstName;

public string FirstName
{
get
{
return firstName;
}
set
{
firstName = value;
NotifyPropertyChanged("FirstName");
}
}

private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}

#region INotifyPropertyChanged Members

public event PropertyChangedEventHandler PropertyChanged;

#endregion
}
}

INotifyPropertyChanged 文档:MSDN

关于c# - 数据绑定(bind)文本框不反射(reflect)源更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1623775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com