我的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
类是第三方控件,在很多我无法修改的地方使用。因此,我不能只向其中添加属性。
Update2:我设法使Overlay
正确发送。现在只需要IsChecked
属性即可。
IsChecked
的绑定应该使用{RelativeSource Self}
,因为绑定是通过CheckBox
应用于Style
的。
您对问题的更新显示您已经解决了另一个问题。