1

我是一个学习Wpf数据绑定功能的新手,最近遇到一个问题让我很困惑。

假设我们在 ViewModel 中有这样的代码:

private Person person;    
public Person Person
{
    get { return person; }
    set
    {
        SetProperty<Person>(ref person, ref value, ()=>Person);
    }
}

忽略可怕的命名Person然后我在 Command 的 Execute() 方法中更改了以下属性:

//try 1
private void UpdateInfoExecute()
{
     Person.Name="somebody";
     Person.Age=22;
}

最后,数据绑定失败。当我像这样更改实现时:

//try 2
Person = new Models.Person() { Age=22,Name="somebody"};

它成功了!

好吧,在我看来,try 1Person也像try 2一样改变了' 属性。该PropertyChanged事件侦听属性,并确保在尝试 1Person之后它会被更改。

我不知道这个理论,谁能指出我错过的关键?

4

1 回答 1

1

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

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

记住.Person就像.Name只是一个财产。

于 2013-03-14T12:26:25.057 回答