menuItem (window.xaml 内) と userControl (foo.xaml 内) の 2 つの個別の UI 要素が個別のファイルに含まれています。
どちらもまったく同じロジックを持ちます。条件が一致し、同じメソッドを呼び出す場合にのみ有効になります。このロジックをコーディングするには、RoutedCommandsを使用します。
CanExecuteとExecutedで同じ条件で、各ファイルで 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つしか呼び出していません...これが私をとても悩ませている理由です。
ありがとう。