WPF 用户控件 属性 绑定到 Inotify属性 已更改,仅在值更改时更新

WPF usercontrol property binding to Inotifypropertychanged, update only when value changed

我发现 属性 用户控件和普通控件之间的绑定存在差异。

例如,假设标记包含以下用户控件:

<myCtrl:DemoControl Level="{Binding Alarm.AlarmLevel}" />

"Level" 是在"Control" 中创建的 int 依赖项 属性。 “Alarm”是一个类型为 Inotify属性changed 的​​对象,具有一个字段 AlarmLevel。

public bool AlarmLevel
{
    get 
    {
        return this._alarmLevel;
    }
    set
    {
        this._alarmLevel = value;
        NotifyPropertyChanged("AlarmLevel");
    }
}

在用户控件中,我做了以下操作:

LevelProperty = DependencyProperty.Register("Level", typeof(int), typeof(DemoControl), new UIPropertyMetadata(0, isLevelChanged));

奇怪的是,当将 AlarmLevel 分配给一个值时,如果该值发生变化,则用户控件 属性 会更新。而如果值保持不变,则不更新。 但在这两种情况下,"NotifyPropertyChanged" 都会被调用 !

例如,如果 AlarmLevel==1,

Alarm.AlarmLevel = 2; // the "isLevelChanged" got called
Alarm.AlarmLevel = 1; // the "isLevelChanged" not called

我记得使用普通控件时,只要调用 PropertyChanged,属性 就会更新。有人知道为什么吗?非常感谢!

您的 AlarmLevel setter 中存在错误。应该是:

if (_alarmLevel != value)
{
this._alarmLevel = value;
NotifyPropertyChanged("AlarmLevel");
}

您应该仅在值实际更改时引发 INotifyPropertyChanged。当您使用 INotifyPropertyChanged 时,更改检查是您的责任。当您依赖属性时,WPF 框架会为您进行检查。

这就是为什么你的代码只工作了一半:)。