У меня есть 2 различных элемента пользовательского интерфейса в разных файлах: menuItem (в window.xaml) и userControl (в foo.xaml).
Оба имеют абсолютно одинаковую логику: они включаются, только если выполняется условие, и вызывают один и тот же метод. Чтобы закодировать эту логику, я использую RoutedCommands .
Я мог бы использовать 2 разных RoutedCommands в каждом файле с одинаковыми условиями в 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 других ... вот почему меня это так беспокоит.
Спасибо.