当绑定依赖项属性改变时,数据触发器不会触发
本文关键字:触发器 数据 依赖 绑定 属性 改变 | 更新日期: 2023-09-27 18:19:21
DataTrigger
存在于ControlTemplate
中
<DataTrigger
Binding="{Binding RelativeSource={RelativeSource Mode=TemplatedParent},
Path=(ui:TreeViewItemHeader.IsDragTarget)}"
Value="True">
<Setter TargetName="PART_Content" Property="Foreground" Value="Red" />
</DataTrigger>
绑定属性IsDragTarget是一个附加属性,它被编码到一个自定义控件类中:
public static readonly DependencyProperty IsDragTargetProperty = DependencyProperty.RegisterAttached
("IsDragTarget",
typeof(bool),
typeof(TreeViewItemHeader),
new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
public static void SetIsDragTarget(DependencyObject self, bool value)
{
self.SetValue(IsDragTargetProperty, value);
}
public static bool GetIsDragTarget(DependencyObject self)
{
return (bool)self.GetValue(IsDragTargetProperty);
}
问题可能描述为DataTrigger
只在控件初始化时出现一次解决该值。更新属性值不会翻转数据触发器。
执行故障排除:
- 在绑定中增加一个空白的
IValueConverter
"返回值";IValueConverter.Convert
方法只被调用一次。 - 执行调试步骤以验证附加的属性值是否更改。
- 将
DataTrigger.Value
属性设置为False
—附加属性的初始值;setter在控件初始化时触发一次。对该属性的后续更改没有触发数据触发器。 - Visual Studio Output窗口没有显示绑定表达式警告。
是否严格要求使用DataTrigger
?我通过切换到Trigger
:
<Trigger Property="ui:TreeViewItemHeader.IsDragTarget" Value="True">
<Setter TargetName="PART_Content" Property="Foreground" Value="Red" />
</Trigger>
不知道为什么DataTrigger
不工作,虽然
您需要通过实现INotifyPropertyChanged接口来引发属性值更改事件
如下所示
getter &Setter应该这样定义:
public static readonly DependencyProperty IsDragTargetProperty = DependencyProperty.RegisterAttached
("IsDragTarget",
typeof(bool),
typeof(TreeViewItemHeader),
new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
public bool IsDragTarget {
get { return (bool)this.GetValue(IsDragTargetProperty); }
set { this.SetValue(IsDragTargetProperty, value); }
}