RelayCommand в C#

. Я изучаю MVVM для C #Разработка Silverlight из

http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

и я запутался в классе RelayCommand, упомянутом в контексте. Код:

public class RelayCommand : ICommand
{
#region Fields

readonly Action _execute;
readonly Predicate _canExecute;        

#endregion // Fields

#region Constructors

public RelayCommand(Action execute)
: this(execute, null)
{
}

public RelayCommand(Action execute, Predicate canExecute)
{
    if (execute == null)
        throw new ArgumentNullException("execute");

    _execute = execute;
    _canExecute = canExecute;           
}
#endregion // Constructors

#region ICommand Members

[DebuggerStepThrough]
public bool CanExecute(object parameter)
{
    return _canExecute == null ? true : _canExecute(parameter);
}

public event EventHandler CanExecuteChanged
{
    add { CommandManager.RequerySuggested += value; }
    remove { CommandManager.RequerySuggested -= value; }
}

public void Execute(object parameter)
{
    _execute(parameter);
}

#endregion // ICommand Members
}

Для чего я не очень понимаю, как _executeи _canExecuteработают в этом случае. (Я новичок в C #и даже не знаю, что такое действие и предикат. Я знаю, что они делегаты, но какая между ними разница и как они работают?)
А еще в программе у меня не появилась строчка

    add { CommandManager.RequerySuggested += value; }
    remove { CommandManager.RequerySuggested -= value; }

Может ли кто-нибудь дать мне объяснение по этому поводу, спасибо!

6
задан Allan Jiang 1 July 2012 в 23:08
поделиться