代码之家  ›  专栏  ›  技术社区  ›  rockeye

如何在不同的控件中使用相同的RoutedCommand?

  •  0
  • rockeye  · 技术社区  · 17 年前

    在不同的文件中有两个不同的UI元素:一个menuItem(在window.xaml中)和一个userControl(在foo.xaml中)。

    两者具有完全相同的逻辑:仅当条件匹配并调用相同的方法时,才会启用它们。为了编写这个逻辑,我使用 路由命令 .

    CanExecute 执行

    我想改进代码以遵循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个。。。这就是为什么它让我如此烦恼。

    谢谢

    2 回复  |  直到 17 年前
        1
  •  1
  •   Tim Cooper    14 年前

    大概是你的 RoutedCommand 是一个 static 类的成员(例如, Commands ).你需要通过考试 静止的 Command 财产:

    <CommandBinding Command="{x:Static local:Commands.TestCommand}"
                        Executed="RoutedCommands.TestRoutedCommand.OnTest"
                        CanExecute="RoutedCommands.TestRoutedCommand.CanTest" />
    
        2
  •  0
  •   rockeye    17 年前

    these . 不再需要CommandBinding,问题就解决了!

    推荐文章