如果不将新实例分配给属性,则通知属性更改将不起作用

时间:2018-12-12 08:29:20

标签: wpf data-binding wpf-controls

假设我在一个类中有属性

    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

这是正确的行为还是我做错了事。

1 个答案:

答案 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;