假设我在一个类中有属性
private InfoDetail dialogInfo;
public InfoDetail DialogInfo
{
get
{
return this.InfoDetail;
}
set
{
this.InfoDetail = value;
this.NotifyPropertyChanged();
}
}
我初始化一次。当我分配这样的属性时
this.InfoDetail.Index = 2;
它没有通知,也没有达到断点。但是当我创建新实例并将其分配给它时,它会触发,例如
InfoDetail obj = new InfoDetail();
obj.index = 2;
this.InfoDetail = obj
这是正确的行为还是我做错了事。
答案 0 :(得分:1)
当我分配
this.InfoDetail.Index = 2;
之类的属性时,它没有通知
这是正确的行为。 InfoDetail
属性本身的值不会改变,它仍然是与以前相同的实例,但是Index的值不同。
要发送有关索引更改的通知,InfoDetail应该实现INotifyPropertyChanged并在Index setter中引发PropertyChanged事件。就像类使用“ DialogInfo”属性一样。
作为第二个选项,您可以将DialogInfo临时重置为null,然后恢复以前的值。在这种情况下,InfoDetail的所有绑定属性将更新-两次。
var info = this.InfoDetail;
info.Index = 2;
this.InfoDetail = null;
this.InfoDetail = info;