我有不同的文件中有2个不同的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个其他方法?
注:在我的项目中,这是更多的30重复routedCommand方法调用只有2个其他...这就是为什么它打扰我这么多。
谢谢。
不幸的是,链接不再有效。我会对提议的解决方案非常感兴趣,你能解释一下吗? – Wilbert 2013-07-15 16:00:45