Ik had er al over gepost in de Devschuur corner, maar er is dus iets wat ik niet begrijp van commands in WPF:
Je maakt een nieuwe class met daarin je commands. In mijn geval heb ik er een RoutedUICommand in die een about box opent. Omdat RoutedUICommand al ICommand implementeert maar verder geen logica heeft in zijn Execute en CanExecute methods moet je die zelf nog gaan implementeren.
Voorbeeld hiervan:
Dan moet je dus een CommandBinding maken die een bepaald command (je RoutedUICommand) mapt aan een 'Executed' method die je dus ergens geprogrammeerd heb. Gewoon een event handler dus?
Voorbeeldje:
En die ShowAboutBoxExecuted ziet er dan weer zo uit bij mij:
Maar wat is dan nog het hele punt van die RoutedUICommand, dan kun je toch net zo goed elk menuitem gelijk je event handler aan laten spreken zonder tussenkomst van een RoutedUICommand...? Die event handler kan dan weer een 'Command' uitvoeren in een aparte class zodat je dat ergens gecentralizeerd in je applicatie hebt. Zoals ik het nu heb heb ik gewoon een domme event handler die in mijn MainWindow zit, waar de logica voor dat event ingepropt zit. Maar het is juist het hele punt van een Command om dat juist te voorkomen.
Tevens snap ik niet echt wat je nou aan die Execute() en CanExecute() methods hebt op deze manier?
En nog een bonusvraag die me ineens te binnen schiet: er zijn standaard allerlei Commands zoals Cut, Paste, Open, etc... Echter moet je hier nog wel de logica voor bouwen, of bestaat dat al? Dat heb ik niet echt kunnen vinden...
Je maakt een nieuwe class met daarin je commands. In mijn geval heb ik er een RoutedUICommand in die een about box opent. Omdat RoutedUICommand al ICommand implementeert maar verder geen logica heeft in zijn Execute en CanExecute methods moet je die zelf nog gaan implementeren.
Voorbeeld hiervan:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| class WindowCommands { private static readonly RoutedUICommand _showAboutBox; static WindowCommands() { _showAboutBox = new RoutedUICommand("About", "About", typeof(WindowCommands)); } public static RoutedUICommand ShowAboutBox { get { return _showAboutBox; } } } |
Dan moet je dus een CommandBinding maken die een bepaald command (je RoutedUICommand) mapt aan een 'Executed' method die je dus ergens geprogrammeerd heb. Gewoon een event handler dus?
Voorbeeldje:
XML:
1
2
3
| <Window.CommandBindings> <CommandBinding Command="Commands:WindowCommands.ShowAboutBox" Executed="ShowAboutBoxExecuted" /> </Window.CommandBindings> |
En die ShowAboutBoxExecuted ziet er dan weer zo uit bij mij:
C#:
1
2
3
4
5
6
| private void ShowAboutBoxExecuted(object sender, ExecutedRoutedEventArgs e) { AboutBox aboutBox = new AboutBox(); aboutBox.Show(); e.Handled = true; } |
Maar wat is dan nog het hele punt van die RoutedUICommand, dan kun je toch net zo goed elk menuitem gelijk je event handler aan laten spreken zonder tussenkomst van een RoutedUICommand...? Die event handler kan dan weer een 'Command' uitvoeren in een aparte class zodat je dat ergens gecentralizeerd in je applicatie hebt. Zoals ik het nu heb heb ik gewoon een domme event handler die in mijn MainWindow zit, waar de logica voor dat event ingepropt zit. Maar het is juist het hele punt van een Command om dat juist te voorkomen.
Tevens snap ik niet echt wat je nou aan die Execute() en CanExecute() methods hebt op deze manier?
En nog een bonusvraag die me ineens te binnen schiet: er zijn standaard allerlei Commands zoals Cut, Paste, Open, etc... Echter moet je hier nog wel de logica voor bouwen, of bestaat dat al? Dat heb ik niet echt kunnen vinden...
[ Voor 5% gewijzigd door Avalaxy op 06-03-2011 21:55 ]