使用对象聚合的WPF数据绑定

时间:2013-01-14 19:25:54

标签: c# wpf data-binding

假设我有一个具有以下属性和方法的Person:

  • public string FirstName
  • public string LastName
  • public House CurrentHouse
  • public void BuildHouse(string streetAddress)

House是一个单独的类,有一些简单的属性,如街道地址。

当我第一次创建Person对象时,我将WPF窗口数据绑定到它。人员以FirstNameLastName开头,但他们的CurrentHouse为空。 (这是一个愚蠢的例子,但为了论证,让我们说这个人必须先建造一个房子才能生活。)数据绑定到FirstNameLastName按预期工作。

现在让我们说我想把这个人搬进一所房子。逻辑看起来像:

public void BuildHouse(string streetAddress)
{
    this.CurrentHouse = new House()
    {
        StreetAddress = streetAddress;
    };
}

我的WPF窗口的数据上下文是此person对象。我有一个标签,显示该人的地址(绑定到MyPerson.CurrentHouse.StreetAddressUpdateSourceTriggerPropertyChanged。当我第一次显示屏幕时,CurrentHouse对象为空,标签为空(预期行为)。但是,当我调用BuildHouse("123 anywhere st")时,我希望数据绑定标签的值更改为“123 anywhere st”。

这不是正在发生的事情,我开始怀疑它是因为当窗口最初打开时,数据绑定Person对象的CurrentHouse属性为null。我的怀疑是否正确?如果是这样,一旦CurrentHouse对象不再为null,我需要做什么才能在标签上启用数据绑定?

1 个答案:

答案 0 :(得分:1)

  

这不是正在发生的事情,我开始怀疑它是因为当窗口最初打开时,数据绑定Person对象的CurrentHouse属性为null。我的怀疑是否正确?如果是这样,一旦CurrentHouse对象不再为null,我需要做什么才能在标签上启用数据绑定?

这是可能的,但您的PersonHouse类更有可能需要实施INotifyPropertyChanged

实现此接口(正确)允许WPF知道对象上的属性已更改(例如正在设置的新House,或者更改房屋内的地址等)。