为什么这个wpf数据绑定失败

时间:2013-03-14 12:24:34

标签: wpf data-binding mvvm

我是一个研究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 之后进行更改。

我不知道这个理论,有人能指出我错过的钥匙吗?

1 个答案:

答案 0 :(得分:1)

我不知道SetProperty到底是做什么的,但在你的“try1”中,你正在改变名字和年龄,而不是人。因此提出了Name和Age属性,Person的引用没有改变并保持不变。在您的“try2”中,您实际上设置了一个新的Person,因此该属性已被更改和提升。

解决方案:确保Person还实现INotifyPropertyChanged并确保每个属性都引发PropertyChanged。然后一切都应该正常。

请记住.Person就像.Name只是一个属性。