0

menuItem (window.xaml 内) と userControl (foo.xaml 内) の 2 つの個別の UI 要素が個別のファイルに含まれています。

どちらもまったく同じロジックを持ちます。条件が一致し、同じメソッドを呼び出す場合にのみ有効になります。このロジックをコーディングするには、RoutedCommandsを使用します。

CanExecuteExecutedで同じ条件で、各ファイルで 2 つの異なる RoutedCommands を使用できます。できます。

DRY ルールに従い、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

(元のメッセージは英語ではないため、翻訳は正確ではない可能性があります)

外部メソッドはサポートされていないようですが、何かを見逃していないと確信しています。私のメソッドが静的であるという事実なのだろうか?

私のメソッドを外部化する別の方法はありますか、それとも他の 2 つだけを呼び出すこれら 4 つのメソッドにとどまらなければなりませんか?

注:私のプロジェクトでは、これは30以上の複製されたroutedCommandメソッドで、他に2つしか呼び出していません...これが私をとても悩ませている理由です。

ありがとう。

4

2 に答える 2

1

おそらくあなたRoutedCommandstaticクラスのメンバーです(たとえば、Commands)。staticそのメンバーをCommandプロパティに渡す必要があります。

<CommandBinding Command="{x:Static local:Commands.TestCommand}"
                    Executed="RoutedCommands.TestRoutedCommand.OnTest"
                    CanExecute="RoutedCommands.TestRoutedCommand.CanTest" />
于 2009-07-10T15:51:59.753 に答える
0

私は自分自身に答えます:

コンパイラは RoutedCommand で extern デリゲートを受け入れないため、ベスト プラクティスは、これらのような ICommand のカスタム実装を使用することです。CommandBinding はもう必要なく、問題は解決しました!

于 2009-07-16T07:29:07.293 に答える