来自usercontrol的WPF relaycommand

时间:2010-04-06 21:56:20

标签: wpf routing command relaycommand

我是WPF的新手,本着尝试做事的精神,正确的方法试图在我的应用程序中实现MVVM。我已经使用了Josh Smith经常提到的文章,除了让我意识到我知之甚少之外,它让我有点难过。

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

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

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

在用户控件上,我需要在用户控件本身上使用Save方法,实际上我应该在viewmodel上处理它。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

那么,您需要绑定到父级(页面)DataContext(viewmodel)吗?尝试使用RelativeSource绑定到SaveCommand:http://msdn.microsoft.com/en-us/library/ms743599.aspx

答案 1 :(得分:0)

尝试探索此one。它将对你的绑定和继电器命令有很大的帮助。

考虑到您的需要,您需要绑定用户控件的datacontext。如果您要使用按钮进行保存命令。试试这个:

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