其他分享
首页 > 其他分享> > CodeGo.net>如何正确地通知数据绑定控件复合属性具有新值?

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

作者:互联网

我已在视图模型中将信息标签绑定到公共财产.该属性是复合属性,即具有多个后备字段.

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.

标签:data-binding,wpf,xaml,c
来源: https://codeday.me/bug/20191120/2046559.html