【问题标题】:MVVM User Control IssueMVVM 用户控制问题
【发布时间】:2010-03-22 20:43:39
【问题描述】:

我在 MVVM 应用程序中遇到了命令问题(我只是在学习 MVVM,所以要轻松一点)。

Valid XHTML http://www.hughgrice.com/mvvmproblem.png

MyClassViewModel 设置为 MainForm1 的数据上下文,MyList 绑定到 UserControl1 数据上下文,并且列表中的每个项目由 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 数据上下文 (MyClassViewModel) 中寻找命令。

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

冒泡命令是一个好的解决方案吗?

【问题讨论】:

标签: wpf binding


【解决方案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

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2011-04-07
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    相关资源
    最近更新 更多