即使使用正确的指令,也无法识别RaiseCanExecuteChanged

时间:2015-05-29 08:36:19

标签: c# wpf mvvm icommand

我仍在学习mvvm并使用c#进行编码,但我遇到了一个我不知道如何解决问题的问题。我的项目似乎无法识别

RaiseCanExecuteChanged 

即使我正在使用

System.Windows.Input;

我使用MVVM LightNET4.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();
            }
        }
    }
}

4 个答案:

答案 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属性的类型。