【问题标题】:WPF DataTrigger and button using PRISM使用 PRISM 的 WPF DataTrigger 和按钮
【发布时间】: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 中定义。唯一的区别是第二个使用转换器。彼得

标签: wpf prism


【解决方案1】:

在命令定义中,你是否设置了 CanExecute ?

我可能错了,但是因为 IsEnabled 绑定到其命令的 CanExecute,它可能会阻止触发器工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 2011-08-17
    • 2013-08-03
    相关资源
    最近更新 更多