Estaba hablando con alguien hoy sobre cómo elegir un patrón de diseño para manejar la lógica en su programa WPF y esperando que la comunidad SO pueda ayudar con más consejos para facilitar la decisión. ¿Qué factores a favor de los comandos superan las molestias?WPF utilizando RoutedUICommands personalizados o controladores de eventos simples?
me preparó un completo sample junto con algunos UML diagrams de los primeros dos de los tres enfoques:
- Uso Haga clic en los controladores de eventos de botones y menús.
- Utilice los comandos vinculados en XAML.
- Utilice los comandos vinculados en el código, con el XAML guardado para el diseño y la interfaz GUI puro.
El curso introductorio en el que había estado y muchos de los libros muestran simples controladores de eventos Click como la forma natural de conectar la lógica a los objetos de la interfaz de usuario.
Estaba un poco sorprendido por la cantidad de sobrecarga necesaria para usar los comandos tanto con el comando que se creó en el código detrás de archivo:
public static readonly ICommand cmdShow2 = new RoutedUICommand(
"Show Window2", "cmdShow2",
typeof(TestDespatchWindow));
y luego aún más código en el XAML con la forma prolija la comando tiene que ser identificado y vinculado:
<Window x:Class="WPFDispatchDemo.TestDespatchWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:w="clr-namespace:WPFDispatchDemo"..>
<Window.CommandBindings>
<CommandBinding Command="{x:Static w:TestDespatchWindow.cmdShow2}"
Executed="OnShow2" />
</Window.CommandBindings>
<DockPanel>
<StackPanel Margin="0,8,0,0">
<Button x:Name="Show2EventBased"
Margin="10,2,10,2"
Click="OnShow2"
Content="Show2 via WPF Event"/>
<Button x:Name="Show2Command"
Command="{x:Static w:TestDespatchWindow.cmdShow2}"
Margin="10,2,10,2"
Content="Show2 via WPF"/>
</StackPanel>
</DockPanel>
</Window>
puedo (todavía) no pretende ser un experto en WPF así que pude haber pintado las cosas como más complejo de lo que realmente son, pero mi sospecha es que no se puede simplificar las cosas mucho más que lo anterior.
Editar:
me encontré con una interesante 3-way comparison entre DelegateCommand, RoutedCommand y eventos.
¿Esto es una pregunta? –
"¿Qué factores a favor de los comandos superan a los inconvenientes?" me parece una pregunta. Pensé que la cantidad de fondo podría hacer que sea más fácil para la gente ver que soy serio y entender el contexto. –