WPF 명령 바인딩에 응답 할 수있는 비 UI 오브젝트가 발생합니다
문제
버튼에서 내장 된 새로 고침 명령에 응답하고 싶은 ViewModel 클래스가 있지만 CommandTarget을 선언하는 방법은 확실하지 않습니다.
간단히 말하면 내 코드는 다음과 같습니다
뷰 모델 생성자 및 실행 및 실행 된 이벤트 핸들러 -
public ViewModel()
{
CommandBinding binding = new CommandBinding(NavigationCommands.Refresh, CommandHandler);
binding.CanExecute += new CanExecuteRoutedEventHandler(binding_CanExecute);
binding.Executed += new ExecutedRoutedEventHandler(binding_Executed);
CommandManager.RegisterClassCommandBinding(typeof(ViewModel), binding);
}
void binding_Executed(object sender, ExecutedRoutedEventArgs e)
{
Debug.Print("Refreshing...");
}
void binding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}
마크 업은 -
<Button Command="Refresh">refresh</Button>
이제이 버튼에서 CommandTarget을 설정하려고했습니다. {Binding Source={StaticResource ViewModel}}
그러나 나는 런타임 말을한다 Cannot convert the value in attribute 'CommandTarget' to object of type 'System.Windows.IInputElement'
.
나는 명령을 처음 접했기 때문에 전적으로 모든 종류의 잘못된 것이 가능합니다. AnyHelp는 감사 할 것입니다.
해결책
RoutedCommand
S와 MVVM은 혼합되지 않습니다. RoutedCommand
S는 시각적 트리에 묶여 있으며 WPF의 CommandBindings
수집. 직접 구현해야합니다 ICommand
MVVM 패턴으로 작동하는 클래스. 보세요 프리즘의 구현 우선.
내 자신의 MVVM 프로젝트에는 몇 가지 명령 구현이 있습니다.
DelegateCommand
. 명령이 실행할 수 있는지 여부를 결정하고 명령을 실행하기위한 전화를 제공 한 전화를 제공했습니다.ActiveAwareCommand
. 인터페이스와 함께 작동합니다 (IActiveAware
) 및 현재 활성 항목에 명령 실행을 보냅니다. 다중 활성 인식 구현은 명령에 스스로 등록하고 명령은 자동으로 라우팅됩니다.CanExecute
/Execute
현재 활성 항목에 대한 호출.
제휴하지 않습니다 StackOverflow