2010-03-21 72 views
1

我在MVVM應用程序中遇到命令問題(我只是在學習MVVM,所以很容易)。MVVM用戶控件問題

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

MyClassViewModel被設定到DataContext爲MainForm1,MYLIST勢必到UserControl的datacontext和列表中的每個項由UserControl2表示。我試圖用火mycommand的在UserControl2如下:

<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

這聽起來像它可能是同一個問題:http://stackoverflow.com/questions/642043/icommand-in-mvvm-wpf – 2010-03-22 01:26:02

回答

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

希望這會有所幫助!