RaiseCanExecuteChanged 이벤트가하는
감사합니다 자동화 된 모드에서는 제대로 작동하지 않으므로 RequerySuggested 이벤트에 대한 canExecute 핸들러를 새로 고치는 모든 UI 상호 작용에 대한 구현이 있습니다. 다음과 같은 코드가 있습니다 (ICommand의이 구현은 성능이 좋지 않지만 매력처럼 작동합니다) :
public class Command<TArgs> : ICommand
{
public Command(Action<TArgs> exDelegate)
{
_exDelegate = exDelegate;
}
public Command(Action<TArgs> exDelegate, Func<TArgs, bool> canDelegate)
{
_exDelegate = exDelegate;
_canDelegate = canDelegate;
}
protected Action<TArgs> _exDelegate;
protected Func<TArgs, bool> _canDelegate;
#region ICommand Members
public bool CanExecute(TArgs parameter)
{
if (_canDelegate == null)
return true;
return _canDelegate(parameter);
}
public void Execute(TArgs parameter)
{
if (_exDelegate != null)
{
_exDelegate(parameter);
}
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
bool ICommand.CanExecute(object parameter)
{
if (parameter != null)
{
var parameterType = parameter.GetType();
if (parameterType.FullName.Equals("MS.Internal.NamedObject"))
return false;
}
return CanExecute((TArgs)parameter);
}
void ICommand.Execute(object parameter)
{
Execute((TArgs)parameter);
}
#endregion
}
감사합니다. 잘 작동합니다. 이 명령의 작동 원리에 대한 정보는 어디에서 찾을 수 있습니까? 특히 MS.Internal.NamedObject에 대해 – Alex
MSDN 라이브러리를 살펴볼 것을 제안합니다. 나는 직접적인 연결이 없다. 이 구현은 꽤 오래된 WPF가 하루의 빛에 도달했을 때의 하루입니다. :) –