2009-07-10 2 views
0

필자는 별개의 파일에 두 개의 별개의 UI 요소 (menuItem (window.xaml) 및 userControl (foo.xaml) 있음)가 있습니다.고유 한 컨트롤에서 동일한 RoutedCommand를 사용하는 방법?

둘 다 똑같은 논리가 있습니다. 조건이 일치하는 경우에만 활성화되며 동일한 방법을 호출합니다. 이 논리를 코딩하려면 RoutedCommands을 사용합니다.

나는 CanExecute에서 동일한 조건으로 각 파일에 2 개의 다른 RoutedCommands를 사용할 수 있고 실행. 그것은 작동합니다.

나는 코드를 개선하여 D.R.Y를 따르고 싶습니다. routedCommand와 연결된 메소드를 규칙 화하고 외부화하십시오. 이것은 두 파일의 결합이다 :

<CommandBinding Command="{x:Static RoutedCommands:TestRoutedCommand.test}" 
        Executed="RoutedCommands:TestRoutedCommand.OnTest" 
        CanExecute="RoutedCommands:TestRoutedCommand.CanTest" /> 

이 TestRoutedCmmand.cs입니다 :

public class TestRoutedCommand 
{ 
    public static RoutedCommand test = new RoutedCommand(); 

    public static void OnTest(object sender, ExecutedRoutedEventArgs e) 
    { 
     System.Windows.MessageBox.Show("test -on"); 
    } 

    public static void CanTest(object sender, CanExecuteRoutedEventArgs e) 
    { 
     System.Windows.MessageBox.Show("test -can"); 

     e.CanExecute = true; 
    } 
} 

내가 할 때, 그 컴파일러 보고서이 오류 :

Error 1 unknown generation error, 'MC6005 :   
Executed="RoutedCommands:TestRoutedCommand.OnTest" is not valid. 
'RoutedCommands:TestRoutedCommand.OnTest' is not a valid name for an event handler method. 
Only instance methods of the generated class or code-behind are valid 

(번역 할 수있다 원래 메시지가 영어가 아니기 때문에 정확하지 않음)

외부 메소드 지원되지 않지만 뭔가 놓치지 않았 음을 확신합니다. 내 방법이 정적이라는 사실이 궁금합니다.

내 방법을 외부화하는 또 다른 방법이 있습니까? 아니면이 4 가지 방법으로 2 명 밖에 호출하지 않아도됩니까?

참고 : 내 프로젝트에서이 중복 된 routedCommand 메서드는 2 개의 다른 호출 ...이 때문에 너무 많은 것을 귀찮게합니다.

감사합니다.

답변

0

내가 나 자신에 대답 : 당신은 Command 재산으로 그 static 멤버를 통과해야 these. CommandBinding이 더 이상 필요하지 않으며 문제가 해결되었습니다!

+1

불행히도 링크가 더 이상 유효하지 않습니다. 나는 제안 된 솔루션에 매우 흥미가있을 것입니다, 당신은 그것을 설명 할 수 있습니까? – Wilbert

1

아마도 RoutedCommand은 클래스에 static 회원입니다 (예 : Commands).

컴파일러는 RoutedCommand와 통근 대표를 허용하지 않으므로이, 가장 좋은 방법은 같은 ICommand의의 사용자 지정 구현을 사용하는 것입니다

<CommandBinding Command="{x:Static local:Commands.TestCommand}" 
        Executed="RoutedCommands.TestRoutedCommand.OnTest" 
        CanExecute="RoutedCommands.TestRoutedCommand.CanTest" /> 
+0

참으로 x : Static ...을 잊어 버렸습니다. 고마워요.하지만이 문제는 해결되지 않습니다. 이 문제를 수정하고보다 정확하게하기 위해 내 질문을 편집했습니다. – rockeye

관련 문제