如何正确通知数据绑定控件复合属性具有新值?

时间:2015-02-02 20:18:04

标签: c# wpf xaml data-binding

我已在视图模型中将信息标签绑定到公共属性。该属性是复合的,即它有多个支持字段。

private String back1;
private String back2;
public String Front { get { return back1 + back2; } }

在此过程中,用户单击一个按钮,该按钮会触发将值设置为 Something 的事件。那部分只是花花公子。所以我也在那里分配了两个支持领域,如下所示。

public Thing Something
{
  ...
  set
  {
    ...
    back1 = getBack1();
    back2 = getBack2();
    OnPropertyChanged();
  }
}

问题是绑定到 Front 的数据标签没有变化。我需要告诉系统它很脏并且需要刷新。但是,由于我没有使用支持字段的任何属性(因此,属性 Front 永远不会设置,只是渲染),我无法做到使用 OnPropertyChanged 方法。

这是一个糟糕的设计,我应该使用两个不同的属性吗?似乎浪费了两个总是会产生共同输出的东西。我怎么能去做呢?

2 个答案:

答案 0 :(得分:3)

绑定的工作原理是根据属性名称监听PropertyChanged 。因此,您需要通知您希望UI“获取”的属性。因此,该方法需要被称为两次。一次为每个属性通知需要更新。在setter中,应该有以下内容。

OnPropertyChanged("Front");
OnPropertyChanged("Something");

第二次调用,如果从属性的 Something 的setter中执行,则可以是无参数的,因为.NET 4.5中该方法的标准版本使用[CallerMemberName]属性,这允许你要这样做:

OnPropertyChanged();

属性的setter中指定名称。请注意,编译器只是为您设置调用属性的名称,它仍然存在。没有属性名称,PropertyChanged没有有效提升。

答案 1 :(得分:0)

您需要将属性名称传递给该方法:

OnPropertyChanged("Front");

检查此Link