在 WPF 中使用具有多个值的 DataTrigger
Posted
技术标签:
【中文标题】在 WPF 中使用具有多个值的 DataTrigger【英文标题】:Using DataTrigger with more than one values in WPF 【发布时间】:2012-04-29 17:48:50 【问题描述】:我使用的 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>
<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>
【问题讨论】:
你想实现wid数据触发吗? @user1341006 你的属性Name
怎么能同时有5个不同的值??
【参考方案1】:
MultiDataTrigger 在满足所有条件而不是任何时应用,这就是您的 MultiDataTrigger 不起作用的原因。
要么有四个单独的触发器,要么将条件放入单独的布尔属性中,例如
bool ShowAssessment
return Value == 301 || Value == 302 ...
当值更改时,为 ShowAssessment 发出属性更改通知
例如
int Value
get return _value;
set
_value = value;
RaisePropertyChanged("Value");
RaisePropertyChanged("ShowAssessment");
然后在 ShowAssessment 上触发。
可能更好的解决方案是添加一个带有 switch 语句的 HeaderText 属性,该语句根据 Value
返回正确的标题文本。然后只需将标题的文本绑定到那个。无需触发器。
【讨论】:
我希望在任何一个值满足时应用触发器。我只想要一个触发器而不使用四个触发器。 我的回答中有几个解决方案。您的四个值的一个触发器,或者通过将逻辑移动到视图模型中没有触发器。【参考方案2】: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
<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
的实现。使用它来提供更改通知。
【讨论】:
如果值为 3、301、302 或 303,我想要它。我该怎么做?以上是关于在 WPF 中使用具有多个值的 DataTrigger的主要内容,如果未能解决你的问题,请参考以下文章
具有空值的 WPF ComboBox SelectedValue 绑定显示为空白
如何使用 Flutter 在 Firestore 中删除具有特定值的多个文档