首页 > 解决方案 > 为什么CommandParameter传递CheckBox.IsChecked的逆值

问题描述

我想问为什么CommandParameter传递相反的值。因为事件名称意味着事件 (CheckedUnchecked) 已经触发并且状态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>

但我想知道发生了什么?是不是因为状态IsChecked尚未改变还是因为其他原因?

标签: wpfxamldata-binding

解决方案


但我想知道发生了什么?是不是因为IsChecked触发事件时状态尚未更改...

不。 的IsChecked属性CheckBox已按预期在Checked/Unchecked事件被触发时设置。

……还是因为别的原因?

是的,这是因为在引发事件之前绑定已解决。因此,在您实际与.CommandParameter _truefalseCheckBoxCheckBox


推荐阅读