2010-01-14 11 views
7

Soy nuevo en Silverlight y XAML. Al tratar de aprender la sintaxis y las mejores prácticas, sigo encontrando una discrepancia (o al menos a mí me parece que sí) de la forma en que algunos implementan controladores de eventos.Controladores de eventos en XAML o Code Behind

En una example de MSDN veo el siguiente código utilizado:

<UserControl x:Class="DragAndDropSimple.Page" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300"> 
    <Canvas x:Name="rootCanvas" 
    Width="640" 
    Height="480" 
    Background="Gray" 
    > 
    <!-- You can drag this rectangle around the canvas. --> 
    <Rectangle 
    MouseLeftButtonDown="Handle_MouseDown" 
    MouseMove="Handle_MouseMove" 
    MouseLeftButtonUp="Handle_MouseUp" 
    Canvas.Left="30" Canvas.Top="30" Fill="Red" 
    Width="50" Height="50" /> 
    </Canvas> 

</UserControl> 

donde se fijan los controladores de ratón, sin embargo, en otra code he visto este método utilizado en el código subyacente:

public Window1() 
     { 
      InitializeComponent(); 

      TransformGroup group = new TransformGroup(); 

      ScaleTransform xform = new ScaleTransform(); 
      group.Children.Add(xform); 

      TranslateTransform tt = new TranslateTransform(); 
      group.Children.Add(tt); 

      image.RenderTransform = group; 

      image.MouseWheel += image_MouseWheel; 
      image.MouseLeftButtonDown += image_MouseLeftButtonDown; 
      image.MouseLeftButtonUp += image_MouseLeftButtonUp; 
      image.MouseMove += image_MouseMove; 
     } 

Supongo que el ejemplo en MSDN es la manera recomendada, sin embargo, me suele gustar el segundo método.

¿Existe una mejor práctica para esta situación?

+0

tampoco! usar Comandos! ;) Escribiría una muestra adecuada como respuesta, pero estoy un poco oxidado –

Respuesta

4

A menos que necesite modificar dinámicamente los controladores de eventos para un objeto, prefiero definirlo en el propio XAML.

+0

Si me suscribo al evento en XAML, ¿se anula automáticamente? – onmyway133

2

Mejor práctica: Use MVVM y sustituya ICommands para controladores de eventos.

Aparte de eso, no existe una "mejor práctica" para establecer manejadores de eventos declarativamente en xaml o mediante código en constructores. Tu decides.

Sin embargo, creo que la mayoría de la gente esperaría ver las declaraciones en la xaml, ya que ahí es donde está diseñando la interfaz de usuario.

+4

Esto hace la suposición bastante grande de que MVVM siempre es una "mejor práctica".No estoy seguro de que eso sea siempre cierto. – AnthonyWJones

+1

Mira, si quieres morir en esa batalla, más poder para ti. En cuanto a mí, me gustaría ser los primeros en dar la bienvenida a nuestros nuevos señores de MVVM. En serio, sin embargo, me gustaría ver el caso (que no sea la aplicación más rudimentaria) donde MVVM no sería la mejor opción. – Will

4

En el primer enfoque, hay dos sitios "código"

  1. el XAML donde se definen los elementos de interfaz de usuario y los eventos están conectados en el mismo lugar.
  2. Los procedimientos de control de eventos en el código detrás de

En la segunda hay 3 "sitios clave"

  1. el XAML donde se definen los elementos de la interfaz
  2. el constructor donde se conectan los eventos hasta
  3. Los procedimientos de control de eventos en el código detrás de

Personalmente prefiero el primer acercamiento. Si elimino un elemento, solo necesito encontrar los manejadores de eventos que deben eliminarse, así que no necesito editar el constructor de la clase también.

Por supuesto, esta es una regla de oro, habrá muchas excepciones.

Cuestiones relacionadas