wpf - 在命令参数中发送当前项目和复选框值
问题描述
我有一个TreeView
带有HierarchialDataTemplate
. 它ItemsSource
绑定到Overlay
我的视图模型中的对象集合,其中每个对象Overlay
都有一个Layer
对象集合(因此是HierarchialDataTemplate
)。对于每个Overlay
,我都显示 aCheckBox
和 a 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
.
您对问题的更新表明您已经解决了另一个问题。
推荐阅读
- android - 如何始终以某种语言显示异常消息
- blazor - 根据 Blazor WebAssembly 中的模型显示/隐藏 div
- cmake - CMake 导入共享和静态库版本,但我只想要一个
- python - 使用切片查询多索引熊猫数据框
- node.js - 节点版本管理器中的“系统”版本是什么意思?
- tensorflow - 使用单个类重新训练 ssd_inception_v2 模型成功,但在某些步骤后使用两个类失败
- visual-studio - 是否可以将 VSIX XAML 工具栏添加到 Visual Studio?
- javascript - html.js 仅在页面加载 Gatsby 时加载脚本一次
- c# - Checking wether textboxes are equal with list items
- c++ - UWP 应用与其配套浏览器扩展之间的 Windows 上的本机消息传递