我已将复选框的Checked
事件绑定到方法。我还通过转换器(实现IMultiValueConverter
)将两个命令参数传递给该方法。在下面的代码中,两个CommandParameter
绑定分别为bool
和类型string
。
<CheckBox Name="cbTopLeftHeader" Content="Top Left Header">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<i:InvokeCommandAction Command="{Binding IncludeCheckedCommand}">
<i:InvokeCommandAction.CommandParameter>
<MultiBinding Converter="{StaticResource MultiBindingConverter}" ConverterParameter="IncludeChecked">
<Binding ElementName="cbTopLeftHeader" Path="IsChecked"></Binding>
<Binding Source="{StaticResource TopLeft}"></Binding>
</MultiBinding>
</i:InvokeCommandAction.CommandParameter>
</i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</CheckBox>
为什么如果我替换行:
<Binding ElementName="cbTopLeftHeader" Path="IsChecked"></Binding>
with:
<Binding RelativeSource="{RelativeSource Self}" Path="IsChecked"></Binding>
在我的转换器中,检查参数从类型bool
更改为DependencyProperty
类型(DependencyProperty.UnsetValue
)?
如何实现Checked
属性而不将元素按名称绑定到自身?
删除相互作用触发器并使用Command
和CommandParameter
属性CheckBox
的属性:
<CheckBox Name="cbTopLeftHeader" Content="Top Left Header" Command="{Binding IncludeCheckedCommand}">
<CheckBox.CommandParameter>
<MultiBinding Converter="{StaticResource MultiBindingConverter}" ConverterParameter="IncludeChecked">
<Binding RelativeSource="{RelativeSource Self}" Path="IsChecked"/>
<Binding Source="{StaticResource TopLeft}"></Binding>
</MultiBinding>
</CheckBox.CommandParameter>
</CheckBox>
或使用ElementName
与您当前绑定到CheckBox
的方法。InvokeCommandAction
的{RelativeSource Self}
不是CheckBox
。