mvvm - RelayCommand lambda 语法问题

标签 mvvm lambda relaycommand

我正在应用 Josh Smith 的 MVVM 模式并且遇到了困难。我一直在这里研究这个问题,但似乎无法完全正确地使用语法。

在我看来,下面的代码符合所需的语法,但 Visual Studio 报告错误 “委托(delegate)‘System.Action’不接受‘2’参数”在指示的行上。

有人可以看到我在哪里犯了错误吗?谢谢!
+汤姆

    RelayCommand _relayCommand_MoveUp;
    public ICommand RelayCommand_MoveUp
    {
      get
      {
        if (_relayCommand_MoveUp == null)
        {
          _relayCommand_MoveUp = new RelayCommand(
          (sender, e) => this.Execute_MoveUp(sender, e),     **ERROR REPORTED HERE**
          (sender, e) => this.CanExecute_MoveUp(sender, e));
          return _relayCommand_MoveUp;
        }
      }
    }

    private void Execute_MoveUp(object sender, ExecutedRoutedEventArgs e)
    {
      if (_selectedFolder != null)
      {
        _selectedFolder.SelectParent();
      }
    }

    private void CanExecute_MoveUp(object sender, CanExecuteRoutedEventArgs e)
    {
      e.CanExecute = (_selectedFolder != null) && (_selectedFolder.Parent != null);
        }


//And from Josh Smith:

  public class RelayCommand : ICommand
  {
    public RelayCommand(Action<object> execute);
    public RelayCommand(Action<object> execute, Predicate<object> canExecute);

    public event EventHandler CanExecuteChanged;

    [DebuggerStepThrough]
    public bool CanExecute(object parameter);
    public void Execute(object parameter);
  }

最佳答案

本周末(8 月 22 日)Josh Smith 为他的 MvvmFoundation 项目在 codeplex 中 checkin 了新的更改,该项目更改了 RelayCommand 为具有参数的代表工作的方式。谨防!

要将参数传递给委托(delegate),您需要使用他的新 RelayCommand 构造函数:

    public ICommand GotoRegionCommand
    {
        get
        {
            if (_gotoRegionCommand == null)
                _gotoRegionCommand = new RelayCommand<String>(GotoRegionCommandWithParameter);
            return _gotoRegionCommand;
        }
    }
    private void GotoRegionCommandWithParameter(object param)
    {
        var str = param as string;
    }

关于mvvm - RelayCommand lambda 语法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/900437/

相关文章:

Java 8 消费者/函数 Lambda 歧义

ruby - 将成功和失败处理程序传递给 ActiveJob

wpf - 对象发送者在 RelayCommand 中始终为空

c# - 根据选定的组合框项限制文本框输入

c# - 如何在模型中直接使用数据注释

c# - 为什么匿名方法不能赋值给var?

mvvm - 在哪里调用RaiseCanExecuteChanged?

mvvm-light - 在 TextChange 上调用命令不会立即更新文本源

WPF DataGrid 单击以创建新项目

function - Kendo Treeview 模板 : d. MyFunction 不是函数