我在不同的文件中有 2 个不同的 UI 元素:一个 menuItem(在 window.xaml 中)和一个 userControl(在 foo.xaml 中)。
两者具有完全相同的逻辑:仅当条件匹配并调用相同的方法时才启用它们。为了编码这个逻辑,我使用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
(翻译可能不准确,因为原始消息不是英文的)
似乎不支持外部方法,但我确信我没有错过任何东西。我想知道我的方法是静态的吗?
是否有另一种方法可以将我的方法外部化,还是我必须使用这 4 种方法,只调用另外 2 种方法?
注意:在我的项目中,这是 30 多个重复的 routedCommand 方法,只调用了另外 2 个方法......这就是为什么它让我如此困扰。
谢谢。