WPF 명령 바인딩에 응답 할 수있는 비 UI 오브젝트가 발생합니다

StackOverflow https://stackoverflow.com/questions/606115

  •  03-07-2019
  •  | 
  •  

문제

버튼에서 내장 된 새로 고침 명령에 응답하고 싶은 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는 감사 할 것입니다.

도움이 되었습니까?

해결책

RoutedCommandS와 MVVM은 혼합되지 않습니다. RoutedCommandS는 시각적 트리에 묶여 있으며 WPF의 CommandBindings 수집. 직접 구현해야합니다 ICommand MVVM 패턴으로 작동하는 클래스. 보세요 프리즘의 구현 우선.

내 자신의 MVVM 프로젝트에는 몇 가지 명령 구현이 있습니다.

  • DelegateCommand. 명령이 실행할 수 있는지 여부를 결정하고 명령을 실행하기위한 전화를 제공 한 전화를 제공했습니다.
  • ActiveAwareCommand. 인터페이스와 함께 작동합니다 (IActiveAware) 및 현재 활성 항목에 명령 실행을 보냅니다. 다중 활성 인식 구현은 명령에 스스로 등록하고 명령은 자동으로 라우팅됩니다. CanExecute / Execute 현재 활성 항목에 대한 호출.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top