【问题标题】:why this wpf data binding fails为什么这个 wpf 数据绑定失败
【发布时间】:2013-03-14 12:24:34
【问题描述】:

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

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

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

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

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

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

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

成功了!

嗯,在我看来,try 1 也像 try 2 一样改变了Person 的属性。 PropertyChanged 事件监听 Person 属性,并确保它会在 try 1 之后被更改。

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

【问题讨论】:

    标签: wpf data-binding mvvm


    【解决方案1】:

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

    解决方案:确保 Person 也实现了 INotifyPropertyChanged,并确保每个属性都引发了 PropertyChanged。那么一切都应该正常。

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

    【讨论】:

    • Person 的引用没有改变,保持不变。 -- 这就是我要找的,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2010-11-29
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多