我仍在学习mvvm
并使用c#
进行编码,但我遇到了一个我不知道如何解决问题的问题。我的项目似乎无法识别
RaiseCanExecuteChanged
即使我正在使用
System.Windows.Input;
我使用MVVM Light
和NET4.5
我一直得到的错误是
`System.Windows.Input.ICommand` does not contain a definition for '`RaiseCanExecuteChanged`' and no extension method '`RaiseCanExecuteChanged`' accepting a first argument of type 'System.Windows.Input.Icommand' could be found(are you missing a using directive or an assembly reference?)
之前有人遇到过这个问题吗?谢谢你的帮助
以下是我在viewmodel中用来创建命令的代码
public class NetworkingViewModel : ViewModelBase, INotifyPropertyChanged
{
public NetworkingViewModel()
{
AddPersonCommand = new RelayCommand(AddPerson,CanAddName );
}
public ICommand AddPersonCommand {get; private set;}
private void AddPerson()
{
*adds person to an observableCollection*
}
private bool CanAddName()
{
return !string.IsNullOrEmpty(Group);
}
public string Group // the Name property
{
get { return _group; }
set
{
if(value !=_group)
{
_group = value;
RaisePropertyChanged("Group");
AddPersonCommand.RaiseCanExecuteChanged();
}
}
}
}
答案 0 :(得分:1)
ICommand
没有RaiseCanExecuteChanged
,但是RelayCommand
(你正在使用)确实......所以你可以尝试演员或其他东西:
var myCommand = AddPersonCommand as RelayCommand;
if(myCommand != null)
myCommand.RaiseCanExecuteChanged();
答案 1 :(得分:0)
如果你正在使用MVVM Light,你应该使用RelayCommands而不是ICommands,以及MVVM Light的RaiseCanExecuteChanged。这是在GalaSoft.MvvmLight.Command命名空间(或者可能是GalaSoft.MvvmLight.CommandWpf命名空间 - http://blog.galasoft.ch/posts/2015/01/re-enabling-the-commandmanager-feature-with-relaycommand-in-mvvm-light-v5)。引用而不是System.Windows.Input。
请参阅: http://www.mvvmlight.net/help/NET45/html/404e779f-7c2b-875f-bf17-b8ad84bfb7ef.htm
答案 2 :(得分:0)
将命令属性定义为relay命令:
public ICommand AddPersonCommand {get;私人集;}
public RelayCommand AddPersonCommand {get; private set;}
答案 3 :(得分:0)
正如@Bijington在评论中所说,RaiseCanExecuteChanged并不存在于ICommand中。 ICommand有CanExecute方法,应该可以工作。 或者您可以将AddPersonCommand转换为Group属性设置器中的RelayCommand,或者使用来自beggining的RelayCommand作为AddPersonCommand属性的类型。