MVVM用户控制问题

时间:2010-03-21 23:45:18

标签: wpf binding

我在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)中查找命令。

是否可以冒泡这样的命令,如果是这样,它是如何完成的?

这个命令是一个很好的解决方案吗?

1 个答案:

答案 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

希望这有帮助!