所以我有一个使用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'
如果我想使用另一个控件中的属性,我会知道如何使用查找祖先但我在这里难倒 - 它可能比我想象的更容易......只是没有在脑海中建立连接。
谢谢!
答案 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上创建命令。这是处理命令行为的另一种解决方法。