Почему CommandParameter передает обратное значение CheckBox.IsChecked - PullRequest
0 голосов
/ 13 сентября 2018

Я хотел бы спросить, почему CommandParameter принимает противоположное значение.поскольку имена событий 'подразумевают, что события (Checked и 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>

но я хотел знать, что происходит?Это из-за того, что состояние IsChecked еще не изменилось, когда события запускаются, или из-за чего-то другого?

1 Ответ

0 голосов
/ 13 сентября 2018

но я хотел знать, что происходит?Связано ли это с тем, что состояние IsChecked еще не изменилось при запуске событий ...

Нет.Свойство IsChecked CheckBox было установлено ко времени, когда событие Checked / Unchecked было запущено, как и ожидалось.

... или это из-за чего-то другого?

Да, это связано с тем, что привязка разрешается до возникновения события.Таким образом, CommandParameter устанавливается на true или false в зависимости от того, проверяется ли CheckBox в настоящее время до , на самом деле вы взаимодействуете с CheckBox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...