Wpf 如何在不同的控件中使用相同的RoutedCommand?
在不同的文件中有两个不同的UI元素:一个menuItem(在window.xaml中)和一个userControl(在foo.xaml中) 两者具有完全相同的逻辑:仅当条件匹配并调用相同的方法时,才会启用它们。要编写此逻辑,我使用RoutedCommands 我可以在每个文件中使用两个不同的RoutedCommand,在CanExecute和Executed中使用相同的条件。它起作用了 我想改进代码以遵循D.R.Y.规则,并将routedCommand和附加方法外部化。这是两个文件中的绑定:Wpf 如何在不同的控件中使用相同的RoutedCommand?,wpf,routed-commands,Wpf,Routed Commands,在不同的文件中有两个不同的UI元素:一个menuItem(在window.xaml中)和一个userControl(在foo.xaml中) 两者具有完全相同的逻辑:仅当条件匹配并调用相同的方法时,才会启用它们。要编写此逻辑,我使用RoutedCommands 我可以在每个文件中使用两个不同的RoutedCommand,在CanExecute和Executed中使用相同的条件。它起作用了 我想改进代码以遵循D.R.Y.规则,并将routedCommand和附加方法外部化。这是两个文件中的绑定: &
<CommandBinding Command="{x:Static RoutedCommands:TestRoutedCommand.test}"
Executed="RoutedCommands:TestRoutedCommand.OnTest"
CanExecute="RoutedCommands:TestRoutedCommand.CanTest" />
执行此操作时,编译器会报告以下错误:
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个。。。这就是为什么它让我如此烦恼
谢谢。您的
RoutedCommand
可能是类中的静态成员(例如,命令
)。您需要将该静态
成员传递到命令
属性:
<CommandBinding Command="{x:Static local:Commands.TestCommand}"
Executed="RoutedCommands.TestRoutedCommand.OnTest"
CanExecute="RoutedCommands.TestRoutedCommand.CanTest" />
我回答自己:
由于编译器不接受RoutedCommand的外部委托,因此最佳做法是使用ICommand like的自定义实现。不再需要CommandBinding,问题就解决了 事实上,我忘记了x:Static。。。谢谢,但这并不能解决我的问题。我编辑了我的问题,以纠正这一点,更准确地说。不幸的是,链接不再有效。我对提议的解决方案很感兴趣,你能解释一下吗?
<CommandBinding Command="{x:Static local:Commands.TestCommand}"
Executed="RoutedCommands.TestRoutedCommand.OnTest"
CanExecute="RoutedCommands.TestRoutedCommand.CanTest" />