How to: Create Globally Available Commands
Retired Content |
---|
This content is outdated and is no longer being maintained. It is provided as a courtesy for individuals who are still using these technologies. This page may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist. |
Overview
Commands are a way to handle user interface (UI) actions. They provide a loosely coupled way to bind the user interface to the logic that performs the action. In this guidance, commands are classified as follows:
- Locally available commands. These commands can be accessed by a limited set of tightly related elements, like a view and its presentation model or presenter.
- Globally available commands. These commands are available to all the elements in a module or multiple modules.
This topic describes how to create globally available commands.
Note
This topic assumes you are familiar with commands. For more information about commands, see the Commands technical concept.
Prerequisites
This topic assumes that you have a solution based on the Composite Application Library with a view and command instances that you want to associate to a globally available command. For information about how to create a solution based on the Composite Application Library, see How to: Create a Solution Using the Composite Application Library. For instructions on how to create a locally available command, see How to: Create Locally Available Commands.
Steps
To create a globally available command, you typically create an instance of the CompositeCommand and expose it through a static class. The CompositeCommand class implements the System.Windows.Input.ICommand interface and supports programmatic registration of child commands. When the composite command is executed, all the child commands get executed. The following procedure explains how to create a globally available command.
To create a globally available command
Create a static class to hold your command instance. You typically create this class inside a module or in the infrastructure project. If you want the command to be invoked only by views in a particular module, create the class in that module. Otherwise, if you want to expose the command to views from multiple modules, place the static class in the infrastructure project. For more information about the infrastructure project, see How to: Create a Solution Using the Composite Application Library.
Add a public CompositeCommand instance to your static class, as shown in the following code.
public static class GlobalCommands{ public static CompositeCommand MyCompositeCommand = new CompositeCommand();}
In your module classes (typically presentation model classes), associate child commands to the globally available command. To do this, add the required using statements to your class and access the static instance of the command and register child commands with the RegisterCommand method, as shown in the following code.
GlobalCommands.MyCompositeCommand.RegisterCommand(command1);GlobalCommands.MyCompositeCommand.RegisterCommand(command2);
Note
To increase the testability of your code, you can use a proxy class to access the globally available commands and mock that proxy class in your tests. For implementation details, see the Commanding QuickStart.
The following procedure describes how to add an invoker for the command you created in the previous procedure.
To add an invoker to a globally available command
Associate controls in your view with the command. The following code shows how to bind a button to the command.
<Button Name="MyCompositeCommandButton" Command="{x:Static local:GlobalCommands.MyCompositeCommand}">Execute My Composite Command </Button>
Outcome
You will have a globally available command with an invoker set up.
Next Steps
If you want to create locally available commands to register with the globally command you created, see How to: Create Locally Available Commands.
Retired Content |
---|
This content is outdated and is no longer being maintained. It is provided as a courtesy for individuals who are still using these technologies. This page may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist. |