WPF用户控制属性绑定到Inotifypropertychanged,只有当值改变时才更新



我发现UserControl和普通Control之间的属性绑定存在差异。

例如,假设标记包含以下usercontrol:

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

"Level"是在"Control"中创建的int依赖属性。"Alarm"是Inotifypropertychanged类型的对象,字段为AlarmLevel。

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

在usercontrol中,我做了以下操作:

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

奇怪的是,当给AlarmLevel赋值时,如果值改变,usercontrol属性得到更新。虽然if值保持不变,但没有更新。但是在这两种情况下,"NotifyPropertyChanged"被调用 !

例如AlarmLevel==1,

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

我记得对于普通控件,每当调用PropertyChanged时,属性就会更新。有人知道为什么吗?很多谢谢!

您的AlarmLevel setter中有一个bug。应该是:

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

你应该只在值实际改变时触发INotifyPropertyChanged。当您使用INotifyPropertyChanged时,变更检查是您的责任。当你设置依赖属性时,WPF框架会为你做检查。

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

相关内容

  • 没有找到相关文章

最新更新