Josh SmithによるMVVMパターンの適用が難しくなります。私はここでこの問題を研究しており、構文が正しいとは思われません。RelayCommandラムダ構文の問題
以下のコードは必要な構文に従っているようですが、Visual Studioはエラーを報告します。 "代理人 'System.Action'は '2'引数" "を表示しません。
誰かが私が間違っている場所を見ることができますか?ありがとう!
+トム
RelayCommand _relayCommand_MoveUp;
public ICommand RelayCommand_MoveUp
{
get
{
if (_relayCommand_MoveUp == null)
{
_relayCommand_MoveUp = new RelayCommand(
(sender, e) => this.Execute_MoveUp(sender, e), **ERROR REPORTED HERE**
(sender, e) => this.CanExecute_MoveUp(sender, e));
return _relayCommand_MoveUp;
}
}
}
private void Execute_MoveUp(object sender, ExecutedRoutedEventArgs e)
{
if (_selectedFolder != null)
{
_selectedFolder.SelectParent();
}
}
private void CanExecute_MoveUp(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = (_selectedFolder != null) && (_selectedFolder.Parent != null);
}
//And from Josh Smith:
public class RelayCommand : ICommand
{
public RelayCommand(Action<object> execute);
public RelayCommand(Action<object> execute, Predicate<object> canExecute);
public event EventHandler CanExecuteChanged;
[DebuggerStepThrough]
public bool CanExecute(object parameter);
public void Execute(object parameter);
}
おかげで、rmoore:
は、デリゲートにパラメータを渡すには、彼の新しいRelayCommand < T代わり>コンストラクタを使用する必要があります。したがって、呼び出されたメソッド内でEventArgsにアクセスする必要がある場合、RelayCommandクラスを使用して呼び出すことができないことを正しく理解していますか? + tom –これは間違いなく、基本的なICommandはイベントを実装していません。実際、私の知る限りではRoutedCommandはありません。実際はRoutedCommandが探すCommandBindingというものから来ています。 MVVMのRoutedCommandsのいくつかの追加情報を私の投稿に追加しました。このコメントに余裕がないので=) – rmoore
ありがとう! +10 ... –