2009-08-04 4 views
1

Возможно ли связать несколько команд с кнопкой.Связывание нескольких команд

У меня есть пользовательский элемент управления, который я вызываю в своем основном приложении (родительском приложении).

Я хочу обработать команду щелчка на обоих элементах управления (пользовательский элемент управления, а также в главном окне). Однако я могу только получить его.

Есть ли способ, которым я могу это получить.

Любая помощь действительно оценена.

Код сниппета:

public class MainWindowFooterCommands 
{ 
    public static readonly RoutedUICommand FooterClickLocalCommand = new RoutedUICommand("Local Button Command", "FooterClickLocalCommand", typeof(MainWindowFooterCommands)); 
} 

private void MainWindowFooterBindCommands() 
{ 
    CommandBinding cmdBindingBXClick = new CommandBinding(MainWindowFooterCommands.FooterClickLocalCommand); 
     cmdBindingBXClick.Executed += ClickCommandHandler; 
     CommandBindings.Add(cmdBindingBXClick); 
} 


void ClickCommandHandler(object sender, ExecutedRoutedEventArgs e) 
{ 
    //Do Something 
} 


//Parent Control holding an instance of the footer control. 
class MainWindow { 

    public MainWindow() 
    { 
     CommandBinding cmdBindingBXClick1 = new CommandBinding(MainWindowFooterCommands.BXClickMainWindowCommand); 
     cmdBindingBXClick1.Executed += LoadParent; 
     CommandBindings.Add(cmdBindingBXClick1); 
    } 

     public void LoadParent(object sender, ExecutedRoutedEventArgs e) 
     { 
     LoadParentWindow(); 
     } 
} 

С уважением, Tushar

ответ

5

Возможно, вы пытаетесь объединить несколько команд, что естественно делать.

Если вы используете Prism, есть класс встроенный для этого называется CompositeCommand (прокрутите немного вниз): https://msdn.microsoft.com/en-us/library/ff921126.aspx

В противном случае, Джош Смит имеет очень хорошую статью о его реализации называется «Command Group» : http://www.codeproject.com/KB/WPF/commandgroup.aspx

Есть несколько очень приятных сценариев, которые вы можете свернуть таким образом (например, «Сохранить все»). Хороший инструмент для вашей сумки.

0

AFAIK WPF не предлагает ничего из коробки для поддержки нескольких CommandBindings на различных уровнях, но вы можете попробовать следующее:

void ClickCommandHandler(object sender, ExecutedRoutedEventArgs e) 
{ 
    IInputElement parent = (IInputElement) LogicalTreeHelper.GetParent((DependencyObject)sender); 
    MainWindowFooterCommands.BXClickMainWindowCommand.Execute(e.Parameter, parent); 
} 

Возможно, вам придется проверить, действительно ли ваш родитель является IInputElement.

Смежные вопросы