【问题标题】:WPF Databinding with Object Aggregation带有对象聚合的 WPF 数据绑定
【发布时间】:2013-01-14 19:25:53
【问题描述】:

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

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

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

当我第一次创建Person 对象时,我将一个 WPF 窗口数据绑定到它。 Person 以 FirstNameLastName 开头,但它们的 CurrentHouse 为空。 (这是一个愚蠢的例子,但为了争论,假设这个人必须先盖房子才能住进去。)FirstNameLastName 的数据绑定按预期工作。

现在假设我想把这个人搬到一所房子里。逻辑看起来像:

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

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

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

【问题讨论】:

    标签: c# wpf data-binding


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-25
      • 2012-07-03
      • 2011-04-30
      • 1970-01-01
      • 2019-07-22
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多