У меня есть 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
сейчас.