【发布时间】:2009-07-10 15:38:28
【问题描述】:
我在不同的文件中有 2 个不同的 UI 元素:一个 menuItem(在 window.xaml 中)和一个 userControl(在 foo.xaml 中)。
两者具有完全相同的逻辑:仅当条件匹配并调用相同的方法时才启用它们。为了编码这个逻辑,我使用 RoutedCommands。
我可以在 CanExecute 和 Executed 中以相同条件在每个文件中使用 2 个不同的 RoutedCommand。它有效。
我想改进代码以遵循 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 种方法?
注意:在我的项目中,有 30 多个重复的 routedCommand 方法只调用了另外 2 个......这就是为什么它让我如此困扰。
谢谢。
【问题讨论】:
标签: wpf routed-commands