Question

Is it possible to bind the multiple commands to the button.

I have a user control, which i am calling in my main application (parent application).

I want to handle a click command on both the controls (the user control as well as on the main window). However i am only able to get one.

Is there any way in which i can get this.

Any help is really appreciated.

Code Snippet:

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();
        }
}

Regards, Tushar

Was it helpful?

Solution

You might be trying to aggregate multiple commands, which is a natural thing to want to do.

If you are using Prism, there is a class builtin for this called the CompositeCommand (scroll down a bit): https://msdn.microsoft.com/en-us/library/ff921126.aspx

Otherwise, Josh Smith has a very good article on his implementation called a "Command Group": http://www.codeproject.com/KB/WPF/commandgroup.aspx

There are some very nice scenarios you can rollup like this (for instance, "Save All"). A good tool for your bag of tricks.

OTHER TIPS

AFAIK WPF doesnt offer anything out of the box to support multiple commandbindings at various levels, but you could try the following:

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

You might have to test whether your parent really is an IInputElement, though.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow