以下是我的代码,我确实包括System.Linq
和System.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; }
}
答案 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;它应该可以解决您的问题。