2010-01-14 12 views
7

Jestem nowy w Silverlight i XAML. Próbując nauczyć się składni i najlepszych praktyk, nadal napotykam na rozbieżności (a przynajmniej wydaje mi się, że tak) w sposobie implementowania procedur obsługi zdarzeń.Event handlers w XAML lub Code Behind

W example z MSDN widzę następujący kod używany:

<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> 

Jeżeli koparki myszy są jednak w drugiej code widziałem tę metodę zastosowaną w kodzie za:

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; 
     } 

Założę się, że przykład na MSDN jest zalecanym sposobem, jednak lubię drugą metodę.

Czy istnieje najlepsza praktyka w tej sytuacji?

+0

ani! użyj poleceń! ;) Napisałbym odpowiednią próbkę jako odpowiedź, ale jestem trochę zardzewiała. –

Odpowiedz

4

O ile nie trzeba dynamicznie modyfikować procedur obsługi zdarzeń dla obiektu, wolę zdefiniować go w samym XAML.

+0

Jeśli zasubskrybuję wydarzenie w XAML, to automatycznie anuluje subskrypcję? – onmyway133

2

Najlepsza praktyka: Użyj MVVM i podstaw obsługi ICommands dla procedur obsługi zdarzeń.

Poza tym nie ma "najlepszej praktyki" do deklarowania instrukcji obsługi zdarzeń w Xaml lub poprzez kod w konstruktorach. To zależy od Ciebie.

Sądzę jednak, że większość ludzi spodziewa się zobaczyć deklaracje w Xaml, ponieważ tam właśnie projektujesz interfejs użytkownika.

+4

To sprawia, że ​​dość duże założenie, że MVVM jest zawsze "najlepszą praktyką".Nie jestem pewien, czy to zawsze prawda. – AnthonyWJones

+1

Zobacz, jeśli chcesz umrzeć w tej bitwie, więcej mocy dla ciebie. Jeśli chodzi o mnie, chciałbym jako pierwszy powitać naszych nowych zwierzchników MVVM. Poważnie, chciałbym zobaczyć sprawę (inną niż najbardziej szczątkowa aplikacja), w której MVVM nie byłby najlepszym wyborem. – Will

4

W pierwszym podejściu istnieją dwie „strony kodowe”

  1. XAML gdzie elementy interfejsu są zdefiniowane i wydarzenia są podłączone w tym samym miejscu.
  2. Procedury obsługi zdarzeń w kodzie za

w drugim są 3 „strony kodowe”

  1. XAML gdzie elementy interfejsu są zdefiniowane
  2. konstruktor gdzie zdarzenia są okablowane up
  3. procedury obsługi zdarzeń w kodzie za

Osobiście wolę pierwsze podejście. Jeśli usunę element, potrzebuję tylko znaleźć procedury obsługi zdarzeń, które wymagają usunięcia, nie będę też musiał edytować konstruktora klas.

Oczywiście taka jest zasada, że ​​będzie wiele wyjątków.

Powiązane problemy