在 WPF 中使用具有多个值的数据触发器
本文关键字:数据 触发器 WPF | 更新日期: 2023-09-27 18:31:41
我正在使用XAML代码,其中一部分是
<DataTrigger Binding="{Binding Path=Name}" Value="1">
<Setter Property="Header" TargetName="expanderHeader" Value="Course Text"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=Name}" Value="2">
<Setter Property="Header" TargetName="expanderHeader" Value="Media Lecture"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=Name}" Value="3">
<Setter Property="Header" TargetName="expanderHeader" Value="Assessment"/>
<DataTrigger Binding="{Binding Path=Name}" Value="4">
<Setter Property="Header" TargetName="expanderHeader" Value="Question"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=Name}" Value="5">
<Setter Property="Header" TargetName="expanderHeader" Value="General"/>
</DataTrigger>
现在我想使用一个 dataTrigger,它可以有 3、301、302 或 303 的值。我该怎么做。我尝试使用多数据触发器,但它不起作用。我尝试使用Multidatatrigger的代码是:
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=Name}" Value="301"/>
<Condition Binding="{Binding Path=Name}" Value="301"/>
<Condition Binding="{Binding Path=Name}" Value="302"/>
<Condition Binding="{Binding Path=Name}" Value="303"/>
</MultiDataTrigger.Conditions>
<Setter Property="Header" TargetName="expanderHeader" Value="Assessment"/>
</MultiDataTrigger>
MultiDataTrigger适用于满足所有条件而不是任何条件的情况,这就是MultiDataTrigger不起作用的原因。
要么有四个单独的触发器,要么将条件放入单独的布尔属性中,例如
bool ShowAssessment
{
return Value == 301 || Value == 302 ...
}
当值发生更改时,为显示评估引发属性更改通知
例如
int Value {
get{ return _value; }
set {
_value = value;
RaisePropertyChanged("Value");
RaisePropertyChanged("ShowAssessment");
}
}
然后在显示评估中触发。
可能更好的解决方案是添加一个带有 switch 语句的 HeaderText 属性,该语句基于 Value
返回正确的标头文本。 然后只需将标题的文本绑定到该文本即可。 无需触发器。
MultidataTrigger 将在满足所有条件时起作用。所以
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=Prop1}" Value="301"/>
<Condition Binding="{Binding Path=Prop2}" Value="301"/>
<Condition Binding="{Binding Path=Prop3}" Value="302"/>
<Condition Binding="{Binding Path=Prop4}" Value="303"/>
</MultiDataTrigger.Conditions>
<Setter Property="Header" TargetName="expanderHeader" Value="Assessment"/>
</MultiDataTrigger>
您将需要一个数据触发器
<DataTrigger Binding="{Binding Path=ConditionEnum}" Value="1">
<Setter Property="Header" TargetName="expanderHeader" Value="Course Text"/>
</DataTrigger>
在代码中使用定义的逻辑设置枚举的值...
例:
Validate()
{
if(Value == 301 || Value == 302|| ....)
{
ConditionEnum = MyEnum.Assessment;
}
//Other Conditions
}
我要离开INotifyPropertyChanged
的实施.使用它来提供更改通知。