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

问题描述 投票:0回答:1

我的TreeView设置为HierarchialDataTemplate。它的ItemsSource绑定到我的视图模型中的Overlay对象的集合,其中每个Overlay都具有Layer对象的集合(因此是HierarchialDataTemplate)。对于每个Overlay,我将显示一个CheckBox和一个仅绑定到LabelOverlay属性的Name

[我想做的是,每次选中/取消选中其中一个复选框时,Overlay的当前IsCheckedCheckBox属性将作为命令参数发送到我的视图模型。

如果我不使用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类是第三方控件,在很多我无法修改的地方使用。因此,我不能只向其中添加属性。

Update2:我设法使Overlay正确发送。现在只需要IsChecked属性即可。

wpf treeview multibinding commandparameter
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.