我有一个对象绑定到使用C#WinForms(定位.NET 4.5.2)的窗体上的控件。我已经实现了INotifyPropertyChanged
,并且当我修改此对象的Property时,它按照预期更新了Form的控件。但是,当我将此对象的实例更改为新实例时,即使尝试修改特定的属性,它也不会再更新控件。当我将一个新对象实例指定给绑定变量时,数据绑定不起作用
class User : INotifyPropertyChanged
{
string _name = "";
public string Name
{
get { return _name; }
set { _name = value; OnPropertyChanged("Name"); }
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string property)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
}
public User() { }
public User(string name)
{
Name = name;
}
public User(User otherUser)
{
Name = otherUser.Name;
}
}
和窗体上我有
User currentUser = new User("Example Name");
lblName.DataBindings.Add("Text", currentUser, "Name");
哪些更新正确。我可以使用currentUser.Name = "Blahblah";
更改名称,它工作正常。当我尝试拨打currentUser = new User("New Name");
时,无论我做什么,它都不会再更新。
我的理解是,对象的特定实例是控件绑定的内容。我的主要目标是不必手动遍历更大对象的每个属性,并在每次更改实例时手动更改所有内容。
我的问题:有没有一种方法来更改对象的实例,而无需去除绑定到控件?
lblName.DataBindings.Add("Text", currentUser, "Name");
相反,你需要一些中介:
这工作完美。谢谢! – pfthroaway