.NET GUI

.NET Community für WPF, Silverlight und mehr!
Willkommen bei .NET GUI. Anmeldung | Registrieren | Hilfe | Impressum | Forumsregeln
in Suchen

How-To: In Silverlight Commands zur Verfügung stellen

Letzter Beitrag 08-10-2009 18:02 von BFreakout. 1 Antworten.
Seite 1 von 1 (2 Treffer)
Beiträge sortieren: Zurück Weiter
  • 07-08-2009 14:41

    • BFreakout
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 02-04-2009
    • Ingolstadt
    • Beiträge 119
    • Punkte 2.320
    • Moderator

    How-To: In Silverlight Commands zur Verfügung stellen

    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

    DotNet-Blog.NET - Every day is an experience!, http://www.dotnet-blog.net

    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
  • 08-10-2009 18:02 Antwort zu

    • BFreakout
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 02-04-2009
    • Ingolstadt
    • Beiträge 119
    • Punkte 2.320
    • Moderator

    CommandService bei Silverlight 3 Navigation Application nutzen

    Bei der Verwendung von Navigation-Feature das neu dabei ist unter Silverlight 3, gibt es zu den CommandService ein Problem. Der CommandService hebt sich vom Xaml definierten Command die Instanz im Speicher. Das liegt natürlich daran, das der CommandService statisch ist. Dazu hilf das schreiben einer eigenen CommandService Extension, die überall aufrufbar ist. Diese Extension überprüft nach einer bestehenden Instanz und löscht sie Gegenfalls und erzeugt danach eine neue.

    Ein Beispiel für eine CommandExtension:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    using SLExtensions.Input;
    
    public static class CommandExtension
    {
    	public static Command GetCommand( string key )
    	{
    		Command.CommandCache.Remove( key );
    
    		return new Command( key );
    	}
    }

    So kann die Extension dann ganz einfach verwendet werden (siehe Zeile 9):

    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 = CommandExtension.GetCommand("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();
            }
        }
    }

    Viel Spaß und viele Grüße,

    BFreakout

    DotNet-Blog.NET - Every day is an experience!, http://www.dotnet-blog.net

    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
Seite 1 von 1 (2 Treffer)
Powered by Community Server (Commercial Edition)    69° - Internet-Agentur München (CMS, ASP.NET, Webdesign)