Commands in WPF: Part I


In this article we will see what Commands are and how we can use them in WPF.


It is often helpful to focus on what the user wants our application to do. WPF supports this through the command abstraction - a command is an action the application performs at the user's request.

WPF's command system lets us treat them as different expressions of the same command.

The command system lets a UI element provide a single handler for a command, reducing clutter and improving the clarity of your code.

The way in which a command is invoked isn't usually important. Whether the user presses Ctrl-C, selects the Edit -> Copy menu item, or clicks the Copy button on the toolbar, the application's response should be the same in each case: it should copy the current selection to the clipboard.

So let's have a sample application that will describe the above described things.

Creating a WPF Application

Fire up Visual Studio 2008 and Create a WPF Application, name it as CommandsWPF.


Now let's have few controls that would fulfil our sample to understand Commands.

Such as some Buttons displaying Copy, Cut, and Paste. And obviously a Text Box that would be the target where we can see the application working.


The following is the XAML for reference:


Now we will see how Commands can be applied to the respective Clipboard Buttons.

Now run the application and see the output as, all the buttons are in disabled.


Even if you select the text nothing happens, that is because we haven't added the Target Control to handle.

Add the CommandTarget property and set the Bindings as follows:


Now run the application and see how we have achieved the Clipboard Commands in Buttons.


As soon as you select the Text the Cut and Copy Buttons are enabled.


As soon as you perform the Copy or Cut Commands operation Paste Button is enabled.


By default TextBox has the Clipboard as ContextMenu, so even if we don't add commands in Buttons the Menu is displayed.


Hope this article helps for the beginning in Commands in WPF. In next part we will explore more.