为什么CommandParameter传递CheckBox.IsChecked的反值

时间:2018-09-13 03:49:20

标签: wpf xaml data-binding

我想问为什么deflate _hull传递相反的值。因为事件名称暗示事件(CommandParameterChecked已被触发,并且Unchecked的状态应该已更改,但事实并非如此,就好像尚未分配IsChecked一样。这不是一个大问题,因为我一直都可以假设相反的意思,但是一旦我将IsChecked扩展为包含Triggers,那么我就无法知道DataTrigger是否为逆一个或没有!

CommandParameter

我找到了解决该问题的方法,如下所示:

<CheckBox IsChecked="{Binding CheckBoxChecked}">
    <i:Interaction.Triggers>
        <ia:DataTrigger Binding="{Binding LayoutManager.ShowZeroInv}" Value="Visible">
            <i:InvokeCommandAction Command="{Binding SameCommand}"
                                   CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type CheckBox}}, Path=IsChecked}" />
        </ia:DataTrigger>
        <i:EventTrigger EventName="Checked">
            <i:InvokeCommandAction Command="{Binding SameCommand}"
         CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type CheckBox}}, Path=IsChecked}" />
        </i:EventTrigger>
        <i:EventTrigger EventName="Unchecked">
            <i:InvokeCommandAction Command="{Binding SameCommand}"
         CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type CheckBox}}, Path=IsChecked}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
</CheckBox>

但是我想知道发生了什么事?是由于事件触发时<CheckBox IsChecked="{Binding CheckBoxChecked}"> <i:Interaction.Triggers> <ia:DataTrigger Binding="{Binding IsVisible}" Value="Visible"> <i:InvokeCommandAction Command="{Binding SameCommand}" CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type CheckBox}}, Path=IsChecked}" /> </ia:DataTrigger> <i:EventTrigger EventName="Checked"> <i:InvokeCommandAction Command="{Binding SameCommand}"> <i:InvokeCommandAction.CommandParameter> <sys:Boolean>True</sys:Boolean> </i:InvokeCommandAction.CommandParameter> </i:InvokeCommandAction> </i:EventTrigger> <i:EventTrigger EventName="Unchecked"> <i:InvokeCommandAction Command="{Binding SameCommand}"> <i:InvokeCommandAction.CommandParameter> <sys:Boolean>False</sys:Boolean> </i:InvokeCommandAction.CommandParameter> </i:InvokeCommandAction> </i:EventTrigger> </i:Interaction.Triggers> </CheckBox> 的状态尚未改变,还是由于其他原因?

1 个答案:

答案 0 :(得分:1)

  

但是我想知道发生了什么事?是由于事件触发时IsChecked的状态尚未改变...

不。 IsChecked的{​​{1}}属性是在CheckBox / Checked事件触发时设置的,与预期的一样。

  

...还是因为其他原因?

是的,这是由于在事件引发之前已解决了绑定这一事实。因此,根据Unchecked当前是否与{{1}互动之前 进行检查,将CommandParameter设置为truefalse }}。