我在MVVM应用程序中遇到命令问题(我只是学习MVVM,所以很容易)。
Valid XHTML http://www.hughgrice.com/mvvmproblem.png
MyClassViewModel设置为MainForm1的datacontext,MyList绑定到UserControl1 datacontext,列表中的每个项目由UserControl2表示。我试图使用以下内容在UserControl2中触发MyCommand:
<CheckBox IsChecked="{Binding MyBool}" Command="{Binding Path=MyCommand}" CommandParameter="{Binding}">
我在输出中收到以下错误:
System.Windows.Data Error: 39 : BindingExpression path error: 'MyCommand' property not found on 'object' ''MyObject''
从这个错误我知道WPF正在寻找绑定到UserControl2的对象中的命令我真正需要的是它在MainForm1 datacontext(MyClassViewModel)中查找命令。
是否可以冒泡这样的命令,如果是这样,它是如何完成的?
这个命令是一个很好的解决方案吗?
答案 0 :(得分:1)
看起来你的命令特定于UserControl2。因此,您必须将ICommand添加到MyObject(如您所说,绑定到UserControl2),或者更改绑定。
WPF会抛出绑定错误,因为UserControl2有一个DataContext'MyObject',所以它对MyClassViewModel中指定的MyCommand没有任何线索。
所以我要扩展MyObject以包含ICommand;
或者将绑定更改为以下内容:
<CheckBox IsChecked="{Binding MyBool}"
Command="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={MainForm1}}, Path=DataContext.MyCommand}"
CommandParameter="{Binding}">
不确定DataContext.MyCommand
,可能只能使用MyCommand
。
希望这有帮助!