【问题标题】:Binding from trigger to object in Collection从触发器绑定到集合中的对象
【发布时间】:2012-01-25 15:39:11
【问题描述】:

我有一个具有这些属性的对象:

IsLightOnVal 是一个包含 2 个字段的集合:状态名称的字符串和值的 Bool,正如我们在第二张图片中看到的:

在我的对象的 ControlTemplate 中,我想创建一个触发器:当我的集合中的第一个对象的值为真时,然后执行此操作....

我可以从我的属性 IsLightOnVal1 和第一张图片的 IsLightOnVal1 轻松访问,但我无法访问我的收藏。

所以这工作正常:

<Trigger Property="IsLightOnVal1" Value="True">
    <Setter Property="Foreground" TargetName="tkValue1" Value="{StaticResource Amber}"/>
</Trigger>

但是当我尝试使用该集合进行某些操作时,我永远无法访问,我尝试了:

<Trigger Property="{Binding IsLightOnVal[0].Value, RelativeSource={RelativeSource AncestorType=NameSpace:MyObject}}" Value="True">
    <Setter Property="Foreground" TargetName="tkValue1" Value="{StaticResource Amber}"/>
</Trigger>

但是触发器的属性似乎不接受绑定...

有人有解决办法吗?

【问题讨论】:

  • 括号语法应该是有效的,你确定你的RelativeSource路径是有效的吗?输出窗口中是否有绑定错误?
  • 错误是:无效的 XAML。就是这样...我尝试了DataTrigger,没有错误但似乎不起作用。

标签: wpf data-binding binding triggers blend


【解决方案1】:

常规Triggers 旨在用于 UI 元素属性。如果要基于绑定值触发触发器,则需要使用 DataTrigger

<DataTrigger Binding="{Binding IsLightOnVal[0].Value, RelativeSource={RelativeSource AncestorType=NameSpace:MyObject}}" Value="True">
    <Setter Property="Foreground" TargetName="tkValue1" Value="{StaticResource Amber}"/>
</DataTrigger>

【讨论】:

  • 感谢 Rachel,正确的代码是:
猜你喜欢
  • 2011-09-02
  • 2011-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 2020-09-28
  • 2012-07-03
  • 2016-06-17
相关资源
最近更新 更多