无法将lambda表达式转换为' string'因为它不是委托类型RelayCommand Model

时间:2015-01-15 12:31:33

标签: c# .net linq lambda relaycommand

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

  

无法将lambda表达式转换为' string'因为它不是委托类型RelayCommand Model

我已经在网站上搜索了很长一段时间,但仍然无法找到任何有用的东西。任何建议都将非常感激。

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; }
    }

2 个答案:

答案 0 :(得分:3)

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

试试这个:

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

或者如果您使用Prism:

RaisePropertyChanged(() => Agree);

我希望,RaisePropertyChanged期望已更改的属性的名称,所以您可能只需要:

RaisePropertyChanged("Agree");

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

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

然后从Action

调用它
RaisePropertyChanged();

答案 1 :(得分:0)

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