我被困在某事上,希望得到一个简单的答案。首先,我有一个具有多重绑定触发器的主题。
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource MyConverter}" >
<Binding Path=".TemplatedParent" RelativeSource="{RelativeSource Self}" />
<Binding Path="IsEnabled" RelativeSource="{RelativeSource Self}" />
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Background" Value="{StaticResource NewBackgroundColor}" />
<Setter Property="BorderBrush" Value="{StaticResource NewBorderBrushColor}" />
</DataTrigger>
我的数据控件文本框、组合框实现了 INotifyPropertyChanged。
在处理过程中,在某些条件下,我想引发“IsEnabled”发生变化的事件,但实际上并没有改变它的值。因此,多重绑定永远不会被触发。由于转换器的第一个参数是控制对象本身,它永远不会“改变”,所以它只是作为转换器的参数来使用。
实际触发触发器的唯一方法是执行类似的操作
MyControl.IsEnabled = false;
MyControl.IsEnabled = true;
还有其他方法可以强制触发多绑定数据触发器吗?
尝试详细说明我的问题。我对基本控件(文本框、组合框、按钮等)进行了子类化,以添加某些设置/功能等。为了它们的共性,它们都支持“IMyCommonInterface”接口。无需重新定义整个“主题”(例如,简单的文本框),我想像进行数据验证一样有条件地更改颜色,但不仅仅是这些示例属性的简单颜色更改。
由于基本文本框不知道“IMyCommonInterface”,也没有自定义属性,因此我创建了一个转换器类“MyConverter”,它将实际控件对象作为第一个参数。现在,在隐蔽器中,我可以做到
if( values[0] is IMyCommonInterface )
然后,我可以对界面进行类型转换并检查所有我想要的任何特殊条件,而不必显式创建say.. 十几个触发器,每个触发器基于 A+B 或 A+C 或 (A+B NOT C) OR D 等。
所以,我不想有一堆不同的主题、一堆触发器等等,只是一个可以使用的集中元素。我正在寻找其他替代方案,但如果我遇到一个实例,即仅抛出 PropertyChanged 事件也不会强制数据触发,我宁愿现在找出来,同时仍然试图理解 .网络有,你基本上可以指向几乎任何东西。