我已在视图模型中将信息标签绑定到公共财产.该属性是复合属性,即具有多个后备字段.
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方法.
这是一个不好的设计,我应该为此使用两个不同的属性吗?绑定总是会产生共同输出的两件事似乎很浪费.我还能怎么做呢?
解决方法:
绑定通过基于属性名称侦听PropertyChanged来工作.因此,您需要为属性通知您希望UI“获取”.因此,该方法需要调用两次.对于每个属性,一次通知需要更新.在设置器中,应有以下内容.
OnPropertyChanged("Front");
OnPropertyChanged("Something");
如果从.NET 4.5中该方法的标准版本使用[CallerMemberName]属性,则第二个调用(如果从属性的Something的设置范围执行)可以是无参数的,它允许您执行以下操作:
OnPropertyChanged();
从属性的设置器开始,未指定名称.请注意,编译器只是为您放置了调用属性的名称,该属性仍然存在.没有属性名称,不会有效引发PropertyChanged.