Wirklich beklagenswert ist das fehlende Command-System in Silverlight. Denn das Command-System wurde in die Windows Presentation Foundation integriert, um bestehende Aufgaben/Tasks besser vom User Interface (Oberfläche) zu trennen. Nur so könnte wirklich eine saubere Trennung mittels MVVM-Pattern auf Silverlight bezogen werden.
Ob das Command-System in Zukunft noch in Silverlight nachträglich implementiert wird, ist momentan leider nicht ersichtlich. Derzeit hilft leider nur das selber schreiben der Commands mittels Dependency Properties. Dennoch kann die Zeit auch durch die Silverlight Extension auf CodePlex eingespart werden. Als alternative bietet das Prism Project die selbe Lösung. Für die persönliche Entscheidung zur Silverlight Extension liegt daran, das es sich hierbei nur um eine Library hält und zudem sehr klein ist.
Download: http://www.codeplex.com/SLExtensions/
Nach dem Herunterladen der Silverlight Extension muss nur folgende DLL ins eigene Silverlight-Projekt referenziert werden: SLExtensions.zip\SLMedia.Core\Bin\Debug\SLExtensions.dll
Hier ein Beispielcode eines Buttons der den Command vom CommandService der Silverlight Extensions eingebunden hat. Hier muss dann der Name des Buttons festgelegt werden, hier zum Beispiel ist es: "ButtonClickMich".
<UserControl x:Class="SilverlightCommandExample.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Input="clr-namespace:SLExtensions.Input;assembly=SLExtensions"
xmlns:SilverlightCommandExample="clr-namespace:SilverlightCommandExample"
Width="400" Height="300">
<UserControl.Resources>
<SilverlightCommandExample:ViewModel x:Name="ViewModel" />
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<Button Input:CommandService.Command="ButtonClickMich" Content="Click mich" />
</Grid>
</UserControl>
Im ViewModel muss nun ein Command-Objekt auf den Namen "ButtonClickMich" erzeugt werden. Das Objekt stellt dann ein Event Zurverfügung, das dann ausgelöst wird wenn das Command aufgerufen wurde.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| using System;
using SLExtensions.Input;
namespace SilverlightCommandExample
{
public class ViewModel
{
// Erstelle ein Command
private Command command = new Command("ButtonClickMich");
public ViewModel()
{
// Abboniere Event des Commands
command.Executed += command_Executed;
}
void command_Executed( object sender, ExecutedEventArgs e )
{
// Folgender Code wird dann ausgelöst vom Command
throw new NotImplementedException();
}
}
} |
Es kann auch eine eigene statische Klasse für die Commands erzeugt werden. Das Beispiel sollte eben nur kurz den Einsatz vom CommandService Demonstrieren.
Viel Spaß und viele Grüße,
BFreakout