我已在视图模型中将信息标签绑定到公共属性。该属性是复合的,即它有多个支持字段。
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 方法。
这是一个糟糕的设计,我应该使用两个不同的属性吗?似乎浪费了两个总是会产生共同输出的东西。我怎么能去做呢?
答案 0 :(得分:3)
绑定的工作原理是根据属性名称监听PropertyChanged
。因此,您需要通知您希望UI“获取”的属性。因此,该方法需要被称为两次。一次为每个属性通知需要更新。在setter中,应该有以下内容。
OnPropertyChanged("Front");
OnPropertyChanged("Something");
第二次调用,如果从属性的 Something 的setter中执行,则可以是无参数的,因为.NET 4.5中该方法的标准版本使用[CallerMemberName]
属性,这允许你要这样做:
OnPropertyChanged();
从属性的setter中指定名称。请注意,编译器只是为您设置调用属性的名称,它仍然存在。没有属性名称,PropertyChanged
没有有效提升。
答案 1 :(得分:0)