Rozmawiałem dzisiaj z kimś o wyborze schematu projektowego do obsługi logiki w programie WPF i mając nadzieję, że społeczność SO może pomóc w dalszym doradztwie, aby ułatwić podjęcie decyzji. Jakie czynniki na korzyść poleceń przeważają nad niedogodnościami?WPF przy użyciu niestandardowych RoutedUICommands lub prostych procedur obsługi zdarzeń?
przygotowałem pełną sample wraz z kilkoma UML diagrams pierwszych dwóch z trzech podejść:
- użytku Kliknij obsługi zdarzeń na przyciski i menu.
- Użyj poleceń powiązanych w XAML.
- Używaj poleceń związanych w kodzie, z XAML utrzymywanym dla czystego układu GUI i stylizacji.
Kurs wprowadzający, w którym był i wiele książek pokazuje proste procedury obsługi zdarzeń Click jako naturalny sposób łączenia logiki z obiektami interfejsu użytkownika.
Był nieco zaskoczony ilością napowietrznych wymagane do korzystania z poleceń zarówno komendy tworzony w kodzie za akt:
public static readonly ICommand cmdShow2 = new RoutedUICommand(
"Show Window2", "cmdShow2",
typeof(TestDespatchWindow));
a potem jeszcze kod w XAML z rozwlekły sposób komenda musi zostać zidentyfikowany i związany:
<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>
mogę (jeszcze) nie uważać się za eksperta WPF więc może mam pomalowane rzeczy jak bardziej skomplikowane niż są w rzeczywistości, ale moje podejrzenie, że nie można uprościć rzeczy o wiele bardziej niż powyższe.
Edit:
znalazłem ciekawą 3-way comparison między DelegateCommand, RoutedCommand i zawodów.
Czy to jest pytanie? –
"Jakie czynniki na korzyść poleceń przeważają nad niedogodnością?" dla mnie to pytanie. Pomyślałem, że ilość tła może ułatwić ludziom zobaczenie, że mówię poważnie i rozumiem kontekst. –