WPF usercontrol属性绑定到Inotifypropertychanged,仅在值更改时更新

时间:2015-07-18 03:29:37

标签: wpf binding controls inotifypropertychanged

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

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

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

级别”是在“控制”中创建的int依赖项属性。 “警报”是一个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属性会更新。如果值保持不变,则不进行更新。 但在两种情况下,“NotifyPropertyChanged”被称为

例如,如果AlarmLevel == 1,

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

我记得通过正常控制,每当调用PropertyChanged时,属性都会更新。谁知道为什么?非常感谢!

1 个答案:

答案 0 :(得分:0)

AlarmLevel设置器中存在错误。它应该是:

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

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

这就是为什么你的代码是半工作的原因:)。