【发布时间】:2012-10-23 04:14:56
【问题描述】:
我有一个关于澄清 WPF 中的数据上下文的问题。我有一个基于棱镜的应用程序。我正在尝试将 DataTrigger 放在 Button 控件上。此 Button 控件配置为使用 PRISM 命令解释器。
<Button
Grid.Column="0"
Content="{Resx AdvancedTroubleShootingButtonLabel}"
prism:Click.Command="{Binding AdvancedTroubleShootingCommand}"
>
<Button.Resources>
<Style
TargetType="{x:Type Button}" BasedOn="{StaticResource CDMWrappedButtonStyle}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=SizerVisible, ElementName=SecuritySizer}" Value="False" >
<Setter Property="Button.IsEnabled" Value="True" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=SizerVisible, ElementName=SecuritySizer}" Value="True" >
<Setter Property="Button.IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Resources>
</Button>
我的假设是 DataTriggers 将使用指定的 elementName 作为触发器的 Datacontext。当我测试这个 XAML 时,触发器不会运行。如果我删除 PRISM 命令语法(并挂钩到标准按钮单击事件)并进行测试,那么触发器就会触发。
我想知道的是,为什么 PRISM 命令处理程序 [syntax] 会导致触发器不使用 Trigger 脚本中标识的 DataContext?
【问题讨论】:
-
遇到了另一种情况,我将绑定脚本放在按钮上。绑定属性是一个依赖属性,应该被按钮拾取。它没有。此按钮上还有一个 PRISM 命令处理程序。当我删除它时,绑定的属性在它被更改时被捕获。有趣的是我在同一个控件上有另一个绑定属性。它在激活 PRISM 命令绑定的情况下被捕获。这两个绑定属性在 View 的数据上下文附加到的 ViewModel 中定义。唯一的区别是第二个使用转换器。彼得