TOC

This article has been localized into Spanish by the community.

Comandos:

Introducción a los comandos en WPF

En un capítulo previo de este tutorial, hemos hablado sobre cómo controlar eventos, como por ejemplo cuando el usuario hace click en un botón o en un elemento de un menú. Sin embargo, en las intefaces de usuario modernas, es común que una misma función esté disponible desde distintos lugares, y sea invocada por diversas acciones del usuario.

Por ejemplo, si tenemos una interfaz típica con un menú principal y un conjunto de barras de herramientas, una acción como Nuevo o Abrir, podría estar disponible desde el menú, en una barra de herramientas, en un menú contextual (por ejemplo al hacer click derecho en la zona principal de la aplicación) o mediante un atajo de teclado como Ctrl+N o Ctrl+A.

Cada una de estas acciones requiere normalmente ejecutar el mismo trozo de código, de modo que en una aplicación WinForms habría que definir un evento para cada una de ellas, para posteriormente llamar a una función común. En el ejemplo anterior, esto se traduciría en al menos tres controladores de eventos y algo de código adicional para controlar el atajo de teclado. No es la situción ideal.

Comandos

Con WPF, Microsoft propone remediar este problema mediante el uso de comandos. Los comandos permiten definir acciones en un único sitio, para posteriomente referirse a ellas desde cualquier control de la interfaz de usuario (elementos de un menú, botones, etc). También es posible asociar atajos de teclado a los comandos, siendo éste método la forma ideal de ofrecer atajos de teclado en las aplicaciones.

Los comandos resuelven también otro problema que aparece al tratar con múltiples entradas a una misma función. En una aplicación WinForms es necesario escribir código para habilitar o deshabilitar controles, dependiendo de si la acción asociada está o no disponible. Por ejemplo, si quisieramos usar una accion como Cortar, sería necesario habilitar o deshabilitar manualmente los elementos asociados a esta acción (elementos de menú, botones, etc) cada vez que cambie la selección de texto.

Con los comandos de WPF, todo está centralizado. Existe un método que controla si un comando puede ser ejecutado, y en función del resultado WPF activa o desactiva los elementos correspondientes de la interfaz de usuario. Esto hace mucho más fácil crear una aplicación dinámica y fluida.

Enlazar comandos

Realmente, los comandos no hacen nada por sí mismos. En esencia consiten en la interfaz ICommand, que únicamente define un evento y dos métodos: Execute() y CanExecute(). El primero se encarga de realizar la acción, mientras que el segundo determina si la acción está disponible. Para lograr realizar la acción asociada al comando, necesitamos enlazar el comando con el código que define la acción, y aquí es donde entra en juego el CommandBinding.

Un CommandBinding se define típicamente en una Window o en un UserControl, y contiene una referencia al comando que controla, así como los controladores para tratar los eventos Execute() y CanExcute() del comando.

Comandos predefinidos

Obviamente es posible implementar nuestros propios comandos, algo que veremos en los próximos capítulos, pero para hacernos la vida más fácil, WPF trae predefinidos más de 100 comandos típicos que podemos necesitar en nuestras aplicaciones. Éstos se dividen en 5 categorias: ApplicationCommands, NavigationCommands, MediaCommands, EditingCommands y ComponentCommands. En especial ApplicationCommands contiene comandos para multitud de acciones muy comunes como Nuevo, Abrir, Guardar, Cortar, Copiar o Pegar.

Resumen

Con los comandos podemos responder a una acción común desde múltiples orígenes, usando un único controlador de evento. También facilitan enormemente activar o desactivar elementos de la interfaz de usuario en función de su disponibilidad. Todo este resumen ha sido un poco teórico, pero en los próximos capítulos veremos como usar y definir nuestros propios comandos.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!