2010-06-15 6 views
1

새로 워진 WPF에서 뭔가 누락되었을 수 있습니다. 내 MainWindow 클래스에 StartService라는 간단한 함수가 있습니다. 내 응용 프로그램에 Ctrl + S 단축키가있는 메뉴 항목 "서비스 시작"을 추가하려고했습니다.바로 가기 및 사용자 지정 RoutedCommand가 포함 된 WPF 메뉴

public static RoutedCommand StartServiceRoutedCmd = new RoutedCommand();

  • 을 내가 추가 내 XAML 코드에서 :

  • 내가 정의했다 나의 MainWindow를 클래스에서

    1. : 나는 다음을 수행했다

      <MenuItem Header="_Start Service" InputGestureText="Ctrl+S" Click="OnStartService" /> 
      
      <Window.CommandBindings> 
          <CommandBinding Command="{x:Static loc:MainWindow.StartServiceRoutedCmd}" 
              Executed="OnStartService" /> 
      </Window.CommandBindings> 
      
      <Window.InputBindings> 
          <KeyBinding Command="loc:MainWindow.StartServiceRoutedCmd" Gesture="CTRL+S" /> 
      </Window.InputBindings> 
      

      상황이 작동하고 있습니다. 이것이 정확하고 체계적인 방법인지 궁금합니다. StopService 함수에 대한 바로 가기가 필요합니다. 이것은 내가 새로운 RoutedCommand StopServiceRoutedCmd를 정의 할 필요가 있다는 것을 의미합니까? 그리고 필요한 모든 바로 가기에 대해서도 그렇습니까?

    +0

    예 서비스를 중지하려면 새로운 RoutedCommand가 필요합니다. 다른 모든 것은 괜찮아 보입니다. – Amsakanna

    +0

    사실 내 메뉴 항목도 다음과 같이 보일 것임을 깨달았습니다. 그런 식으로 어디에서나 유효성 검사를받습니다. 나는 CanStartService()를 추가한다. 나는 옳은 길에 메신저를 알고있어서 기쁩니다. :) – Tamer

    +0

    이전에 이벤트 기반 방법을 사용하고 있다고 생각하고 변경하는 것을 잊어 버린 명령으로 변환하는 동안 :) 예! 거기에 명령을 사용해야합니다. 때로는 이벤트에서 명령으로 변경하는 데 어려움이있을 수 있습니다. 이를 위해 MVVM Light Toolkit의 EventToCommand Behavior를 사용할 수 있습니다. http://www.galasoft.ch/mvvm/getstarted/ – Amsakanna

    답변

    2
    <MenuItem Header="_Start Service" InputGestureText="Ctrl+S" Command="loc:MainWindow.StartServiceRoutedCmd /> 
    
    <Window.CommandBindings> 
         <CommandBinding Command="{x:Static loc:MainWindow.StartServiceRoutedCmd}" 
           Executed="OnStartService" /> 
         </Window.CommandBindings> 
    
    <Window.InputBindings> 
         <KeyBinding Command="loc:MainWindow.StartServiceRoutedCmd" Gesture="CTRL+S" /> 
    </Window.InputBindings>