Отправить текущий пункт и значение флажка в параметрах команды - PullRequest
0 голосов
/ 17 октября 2019

У меня есть TreeView настройка с HierarchialDataTemplate. Это ItemsSource связано с коллекцией Overlay объектов в моей модели представления, где каждый Overlay имеет коллекцию Layer объектов (таким образом, HierarchialDataTemplate). Для каждого Overlay я отображаю CheckBox и Label, которые просто связаны со свойством Overlay Name.

Я пытаюсь сделать следующее:каждый раз, когда один из флажков установлен / снят, текущие Overlay и свойство IsChecked CheckBox будут отправлены в качестве параметров команды моей модели представления.

Если я не используюMultiValueConverter, я могу отправить одно из свойств в порядке. Но мне нужно отправить оба в качестве параметров.

Ниже приведен соответствующий .xaml для дерева. Я показываю только необходимые части и только триггер Checked, потому что Unchecked точно такой же:

<TreeView ItemsSource="{Binding OverlaysViewSource}" Name="LayersTreeView">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Layers}" >
            <StackPanel Orientation="Horizontal">
                <CheckBox IsChecked="True">
                    <i:Interaction.Triggers>
                        <i:EventTrigger EventName="Checked">
                                <i:InvokeCommandAction Command="{Binding DataContext.SetVisibilityCmd, RelativeSource={RelativeSource AncestorType=UserControl}}" >
                                    <i:InvokeCommandAction.CommandParameter>
                                        <MultiBinding Converter="{StaticResource multiValueConverter}">
                                            <Binding Path="IsChecked, RelativeSource={RelativeSource AncestorType=CheckBox}" />
                                            <Binding/>
                                        </MultiBinding>
                                    </i:InvokeCommandAction.CommandParameter>
                                </i:InvokeCommandAction>
                            </i:EventTrigger>
                    </i:Interaction.Triggers>
                </CheckBox>
                <Label Content="{Binding Name}" />
            </StackPanel>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

Итак, в MultiBinding первый: <Binding Path="IsChecked, RelativeSource={RelativeSource AncestorType=CheckBox}" />, чтобы попробоватьи отправьте флажок IsChecked свойство. Однако значение, которое я получаю в команде: DependencyProperty.UnsetValue.

Второе значение относится только к текущему элементу Overlay, но все значение TreeView отправляется в качестве параметра.

Обновление: класс Overlay является сторонним элементом управления и используется во многих местах, которые я не могу изменить. Поэтому я не могу просто добавить к нему свойство.

Обновление 2: мне удалось заставить Overlay правильно отправлять. Просто нужно свойство IsChecked сейчас.

1 Ответ

1 голос
/ 18 октября 2019

Для привязки IsChecked следует использовать {RelativeSource Self}, поскольку привязка применяется к CheckBox через Style.

Ваше обновление вашего вопроса показывает, что вы уже решилидругой.

...