【问题标题】:Cannot convert lambda expression to type 'string' because it is not a delegate type RelayCommand Model无法将 lambda 表达式转换为类型“字符串”,因为它不是委托类型 RelayCommand 模型
【发布时间】:2019-01-03 15:01:32
【问题描述】:

以下是我的代码,我确实包含了 System.LinqSystem.Data,但我仍然收到此错误:

无法将 lambda 表达式转换为类型“字符串”,因为它不是委托类型 RelayCommand 模型

我已经在所有网站上搜索了很长一段时间,但仍然找不到任何远程有用的东西。任何建议将不胜感激。

class MainViewModel:ViewModelBase
{


    private string _location;
    private bool   _agree;
    private MyRelayCommand _relayCommand;
    public MainViewModel()
    {
        _relayCommand = new MyRelayCommand(
            new Action(() => Install()),
            () => true);
    }

    public void Install()
    {

    }

    public string Location
    {
        get { return _location; }
        set
        {
            if (_location == value)
                return;

            //RaisePropertyChanging(() => Location);
            _location = value;
            RaisePropertyChanged(() => Location);

            _relayCommand.RaiseCanExecuteChanged();

        }
    }

    public bool Agree
    {
        get { return _agree; }
        set
        {
            if (value == _agree)
                return;
            //RaisePropertyChanging(() => Agree);
            _agree = value;
            RaisePropertyChanged(() => Agree.ToString);

            _relayCommand.RaiseCanExecuteChanged();

        }
    }


    public ICommand InstallCommand
    {
        get { return _relayCommand; }
    }

【问题讨论】:

    标签: c# .net linq lambda relaycommand


    【解决方案1】:

    您提供的表达式不是有效的操作。它期望() => 之后的表达式返回string,而不是另一个Action

    试试这个:

    RaisePropertyChanged(() => Agree.ToString());
    

    或者,如果您使用的是 Prism:

    RaisePropertyChanged(() => Agree);
    

    不过,我希望 RaisePropertyChanged 需要更改的属性名称,所以也许您只需要:

    RaisePropertyChanged("Agree");
    

    您可以使用 .NET 4.5 CallerMemberName 属性来装饰 RaisePropertyChanged,因此您甚至不需要提供已更改的属性名称。

    RaisePropertyChanged([CallerMemberName] string callerMember = null)
    { }
    

    然后从Action调用它:

    RaisePropertyChanged();
    

    【讨论】:

    • RaisePropertyChanged (RPC) 可能来自Prism,在这种情况下它应该是RaisePropertyChanged() => Agree);。虽然,这个问题缺少一些关于 RPC 方法的信息..
    • @Default:谢谢。这确实是可能的。
    • 实际上,通过查看Location 可能是这种情况的属性,将其与RaisePropertyChanged(() => Location); 进行比较
    • @Default:谢谢。更新了您的评论。
    【解决方案2】:

    在您的代码中包含以下命名空间: 使用 System.Data.Entity;它应该可以解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多