我是一个研究Wpf数据绑定功能的新手,最近我遇到了一个困扰我的问题。
假设我们在ViewModel中有这样的代码:
private Person person;
public Person Person
{
get { return person; }
set
{
SetProperty<Person>(ref person, ref value, ()=>Person);
}
}
忽略可怕的命名。然后我在Command的Execute()方法中更改了Person
属性,如下所示:
//try 1
private void UpdateInfoExecute()
{
Person.Name="somebody";
Person.Age=22;
}
最后,数据绑定失败了。当我改变这样的实现时:
//try 2
Person = new Models.Person() { Age=22,Name="somebody"};
成功!
嗯,在我看来,尝试1 也改变了Person
的属性,就像尝试2 那样。 PropertyChanged
事件会在Person
属性上进行侦听,并确保在尝试1 之后进行更改。
我不知道这个理论,有人能指出我错过的钥匙吗?
答案 0 :(得分:1)
我不知道SetProperty到底是做什么的,但在你的“try1”中,你正在改变名字和年龄,而不是人。因此提出了Name和Age属性,Person的引用没有改变并保持不变。在您的“try2”中,您实际上设置了一个新的Person,因此该属性已被更改和提升。
解决方案:确保Person还实现INotifyPropertyChanged
并确保每个属性都引发PropertyChanged
。然后一切都应该正常。
请记住.Person
就像.Name
只是一个属性。