2010-04-06 113 views
2

我是WPF的新手,本着尝试做事情的精神,正确的方式试图在我的应用程序中实现MVVM。我已经使用了乔希史密斯经常提到的文章,除了让我意识到我知道得有多少,这让我有点难过。来自usercontrol的WPF relaycommand

具体来说,我有一个页面,使用RelayCommand对象直接在页面上处理按钮,这很好。但是,按钮(保存)最终将位于也包含其他按钮的用户控件上,并且该控件将用于多个页面。

我的问题是这样的;如何将命令从用户控件转发到包含它的页面(即viewmodel)?如果我绑定到用户控件的命令

public ICommand SaveCommand 
{ 
    get 
    { 
    if (_saveCommand == null) 
    { 
     _saveCommand = new RelayCommand(
      param => this.Save(), 
      param => this.CanSave 
     ); 
    } 
    return _saveCommand; 
    } 
} 

,我将需要使用用户控件本身保存方法的时候,其实我应该处理它的视图模型。

任何人都可以帮忙吗?

回答

0

所以,你需要绑定到父的(page)DataContext(viewmodel)?尝试使用RelativeSource绑定到SaveCommand:http://msdn.microsoft.com/en-us/library/ms743599.aspx

+0

谢谢! 如果有人有兴趣,可以这样做; Command =“{Binding SaveCommand}” CommandParameter =“{Binding RelativeSource = {RelativeSource FindAncestor,AncestorType = {x:Type UserControl}}}” – pilsdumps 2010-04-08 20:09:16

0

尝试探索此one。它将帮助你很多的绑定和中继命令。

有了您的担心,您需要绑定用户控件的datacontext。如果你打算使用一个按钮来保存你的命令。试试这个:

<Grid x:Name="LayoutRoot" DataContext="{ yourViewModelHere }"> 
     <Button x:Name="btnSave" Command="{Binding SaveCommand}"/> 
</Grid> 
+0

“ONE”链接已死亡。有一个工程? – 2015-03-17 18:14:47