首页 > 解决方案 > 在命令参数中发送当前项目和复选框值

问题描述

我有一个TreeView带有HierarchialDataTemplate. 它ItemsSource绑定到Overlay我的视图模型中的对象集合,其中每个对象Overlay都有一个Layer对象集合(因此是HierarchialDataTemplate)。对于每个Overlay,我都显示 aCheckBox和 a Label,它们只是绑定到Overlay'Name属性。

我想要做的是,每次选中/取消选中其中一个复选框时,当前OverlayIsChecked属性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该类是第三方控件,在很多我无法修改的地方使用。所以我不能只给它添加一个属性。

Update2:我已经设法让Overlay正确发送。现在只需要IsChecked房产。

标签: wpftreeviewmultibindingcommandparameter

解决方案


IsChecked应该使用的绑定{RelativeSource Self},因为绑定正在CheckBox通过Style.

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


推荐阅读