如何在同一个复选框命令中使用isChecked作为命令参数

时间:2011-04-13 13:34:52

标签: wpf mvvm

所以我有一个使用WPF / MVVM触发命令的复选框,这很好但我想使用复选框的IsChecked属性作为命令参数。我试过这个。

  <CheckBox Margin="3" Content="Clear Selected OEM" 
                              Command="{Binding Path=ClearOemCommand}" 
                              CommandParameter="{Binding Path=IsChecked}"/>

我在输出窗口中出现错误

System.Windows.Data Error: 40 : BindingExpression path error: 'IsChecked' property not found on 'object'

如果我想使用另一个控件中的属性,我会知道如何使用查找祖先但我在这里难倒 - 它可能比我想象的更容易......只是没有在脑海中建立连接。

谢谢!

4 个答案:

答案 0 :(得分:29)

请在 CommandParameter 中添加 RelativeSource Self

  <CheckBox Margin="3" Content="Clear Selected OEM" 
   Command="{Binding Path=ClearOemCommand}" 
   CommandParameter="{Binding Path=IsChecked, RelativeSource={RelativeSource Self}}" />

答案 1 :(得分:3)

如果你遇到以下异常,就像我做的那样......

设置属性System.Windows.Data.Binding.RelativeSource引发异常

请改为尝试:

CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=IsChecked}"

答案 2 :(得分:2)

是JW1是正确的。您也可以使用这样的元素名称,这也可以使用

"{Binding Path=IsChecked,ElementName=chkAll}"

答案 3 :(得分:1)

您可以将IsChecked与CLR属性绑定,并在CLR属性的setter上执行命令逻辑,而不是在CheckBox上创建命令。这是处理命令行为的另一种解决方法。