在命令参数中发送当前项目和复选框值

Send current Item and checkbox value in command parameters

我有一个 TreeView 设置 HierarchialDataTemplate。它的 ItemsSource 绑定到我的视图模型中的 Overlay 个对象的集合,其中每个 Overlay 都有一个 Layer 个对象的集合(因此 HierarchialDataTemplate)。对于每个 Overlay,我显示一个 CheckBox 和一个 Label,它们简单地绑定到 OverlayName 属性。

我想做的是,每次其中一个复选框是 checked/unchecked,当前 OverlayIsChecked 属性 19=] 将作为命令参数发送到我的视图模型。

如果我不使用 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 class 是第三方控件,用在很多地方我没法修改。所以我不能只添加一个 属性 到它。

更新 2:我已经设法让 Overlay 正确发送。现在只需要 IsChecked 属性。

IsChecked 的绑定应该使用 {RelativeSource Self},因为绑定是通过 Style 应用于 CheckBox

您对问题的更新表明您已经解决了另一个问题。