gpt4 book ai didi

.net - WPF - 如何结合DataTrigger和触发器?

转载 作者:行者123 更新时间:2023-12-03 06:02:40 25 4
gpt4 key购买 nike

NOTE I have asked the related question: How to combine DataTrigger and EventTrigger?

我有一个包含多个项目的列表框。该项目的类实现 INotifyPropertyChanged 并具有属性 IsAvailable。我使用该属性来使用不同的颜色来指示列表中不可用的选项。

但是,如果所选项目不可用,则前景色应为红色。

<ListBox>
<ListBox.Resources>
<DataTemplate DataType="{x:Type local:InstitutionViewModel}">
<TextBlock Name="Name" Text="{Binding Name}"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsAvailable}" Value="False">
<Setter TargetName="Name" Property="Foreground" Value="#888"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.Resources>
</ListBox>

我使用上述数据触发器将不可用的项目灰显。

我面临的问题是,选择该项目的事实与模板绑定(bind)的基础数据无关。我真正想要的是某种多触发器,它支持依赖属性 (ListBoxItem.IsSelected) 上的常规 Trigger 以及 DataTrigger > 在绑定(bind)的数据项上。

可以在不将选择概念引入我的 View 模型的情况下完成此操作吗?

对于任何想知道为什么我不禁用不可用项目的人,请了解应用程序的要求是可以选择不可用的选项。实际上有几个列表框,其中一个列表框的选择会影响其他列表框中可用的内容。我无法禁用这些项目,因为如果根据之前的选择禁用项目,用户将无法改变主意或探索不同的组合。

最佳答案

对于遇到此问题的其他人,我找到了适合我的解决方案。当然,我仍然有兴趣看到其他有趣的答案。

这就是我所做的:

<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding
RelativeSource={
RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}},
Path=IsSelected}" Value="True"/>
<Condition Binding="{Binding IsAvailable}" Value="False"/>
</MultiDataTrigger.Conditions>
<Setter TargetName="Name" Property="Foreground" Value="#F00"/>
</MultiDataTrigger>

虽然这是一个多重触发器,但没有什么特别的。如果您只想在数据模板中以不同的方式设置所选项目的样式,您可以使用:

<DataTrigger Binding="{Binding 
RelativeSource={
RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}},
Path=IsSelected}" Value="True">
<Setter TargetName="Name" Property="Foreground" Value="#888"/>
</DataTrigger>

关于.net - WPF - 如何结合DataTrigger和触发器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/602517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com