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에 – rmoore
감사 RoutedCommands에 대한 몇 가지 addtional 정보를 추가! +10 ... –