我发现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时,属性都会更新。谁知道为什么?非常感谢!
答案 0 :(得分:0)
AlarmLevel设置器中存在错误。它应该是:
if (_alarmLevel != value)
{
this._alarmLevel = value;
NotifyPropertyChanged("AlarmLevel");
}
您应该只在值实际更改时引发INotifyPropertyChanged。使用INotifyPropertyChanged时,更改检查是您的责任。当您使用依赖项属性时,WPF框架会为您进行检查。
这就是为什么你的代码是半工作的原因:)。