Dre*_*kes 50 .net wpf triggers selection listboxitem
注意我已经问过相关问题:如何组合DataTrigger和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>
Run Code Online (Sandbox Code Playgroud)
我使用上面的数据触发器来灰显不可用的项目.
我面临的问题是,选择项目的事实与模板绑定的基础数据无关.我真正想要的是某种多触发器,它支持Trigger依赖属性(ListBoxItem.IsSelected)上的常规以及DataTrigger绑定数据项.
可以在不将选择概念引入我的视图模型的情况下完成吗?
对于任何想知道我为什么不禁用不可用项目的人,请理解应用程序的要求是可以选择不可用的选项.实际上有几个列表框,其中一个选项会影响其他列表框中的可用内容.我无法禁用这些项目,因为如果根据之前的选择禁用了项目,用户将无法改变主意或探索不同的组合.
Dre*_*kes 65
对于任何反对这个问题的人,我找到了一个适合我的解决方案.当然,我仍然有兴趣看到其他有趣的答案.
这是我做的:
<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>
Run Code Online (Sandbox Code Playgroud)
尽管如此,这并不是什么特别之处.如果您只想在数据模板中以不同方式设置所选项目的样式,则可以使用:
<DataTrigger Binding="{Binding
RelativeSource={
RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}},
Path=IsSelected}" Value="True">
<Setter TargetName="Name" Property="Foreground" Value="#888"/>
</DataTrigger>
Run Code Online (Sandbox Code Playgroud)
Vad*_*dim 13
要将其与DataGridRow更改绑定模式一起使用,以便Self:
Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22549 次 |
| 最近记录: |