Связывание нескольких команд - PullRequest
1 голос
/ 04 августа 2009

Можно ли привязать несколько команд к кнопке.

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

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

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

Любая помощь очень ценится.

Фрагмент кода:

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

Ответы [ 2 ]

5 голосов
/ 04 августа 2009

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

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

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

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

0 голосов
/ 04 августа 2009

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

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

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

...