WPF命令与事件触发器命令


WPF按钮中,我们有一个Command参数,可以绑定到ICommand.

<Button Command="{Binding SomeCommand}"/>

我们还可以将EventTriggers与InvokeCommandAction一起使用来触发ICommand.

<Button>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="Click">
            <i:InvokeCommandAction Command="{Binding SomeCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

他们和什么时候使用哪个有什么区别?

更新:

我注意到以下情况的不同之处:

>我有一个文本框,如果文本框为空,则使用IValudationRule进行验证.
>我添加了MultiDataTrigger条件,以便在Validation.HasError等于true时将保存按钮的IsEnabled属性设置为false.

使用Button命令一切正常,但使用EventTrigger它不起作用.

有什么理由吗?

最佳答案 如果您不使用CanExecute,则您提供的代码段几乎相同. InvokeCommandAction不是本机WPF类,它是在交互库中创建的,用于控件不提供Command并且您必须将Command绑定到某个事件的情况.例如,当您需要ListBox.SelectionChanged等命令时

所以基于上面,我的建议是,如果可能的话,总是使用Command,并且只有当你不能没有它时才使用EventTrigger.

另请注意,ICommand还提供了基于哪个按钮可以启用/禁用的CanExecute,这在第二种情况下不起作用

点赞