Silverlight 4: BusyIndicator mit WCF RIA Services verwenden

Als ich heute mit den WCF RIA Services gespielt habe, fragte ich mich, wie ich den Ladezustand des aktuellen DomainContextes darstellen kann.
Die Daten in meinem Beispiel, werden durch eine WCF Service Application bereitgestellt und in einem Datagrid dargestellt. Sobald die Daten durch den Service geladen sind, werden sie im Datagrid angezeigt. Eine Rückmeldung ob gerade Daten geladen werden, oder wie lange dies noch dauert, gibt es nicht. Für den Nutzer ist dieser Umstand nicht besonders schön.

Das aktuelle Silverlight Toolkit (November Release) enthällt genau für dieses Problem ein passendes Control namens “BusyIndicator” (vormals Activity Control). Dieses leicht zu verwendende Control zeigt dem Nutzer den Zustand seiner Anwendung an und gibt somit ein Feedback darüber, dass die Anwendung noch nicht abgestürzt ist. Die Verwendung ist denkbar einfach. Es gibt eigentlich nur zwei Dinge die beachtet bzw. zur Kenntnis genommen werden müssen.

  1. IsBusy Eigenschaft: Ist diese Eigenschaft auf True gesetzt wird der Ladebalken angezeigt. Auf False nicht. Ganz einfach.
  2. Der BusyIndicator sollte die Elemente umschließen, welche Ladeaktivitäten ausführen. Ist der BusyIndicator aktiv, werden alle Elemente, welche sich in ihm befinden, deaktiviert. Ähnlich einem Modal Popup.

Folgendes Beispiel fügt einen Ladebalken zu einem Datagrid hinzu.


    
          
    


Wem der Standard BusyIndicator nicht ausreicht, kann diesen einfach seinen Bedürfnissen anpassen. So zum Beispiel lässt sich der Ladetext austauschen oder die Animation gegen eine Fortschrittsanzeige austauschen.


    
          
    


Wer mehr über das Styling des Ladebalkens erfahren möchte, sollte sich diesen Blogbeitrag genauer ansehen.

Wie kann der BusyIndicator nun meinen DomainContext überwachen?
Ganz einfach:

Der DomainService besitzt eine Eigenschaft IsLoading. Diese signalisiert, dass der DomainService gerade Daten lädt. Wird diese Eigenschaft der IsBusy Eigenschaft des Indicators zugewießen, startet der Ladebalken seine Aktivität. Nun würde dieser aber nicht mehr verschwinden. Aus diesem Grund wird ein Eventhandler verwendet, welcher bei erfolgtem Ladevorgang des Domain Contextes aufgerufen wird (LoadCompleted). In diesem kann die IsBusy Eigenschaft wieder auf false gesetzt werden.

 protected override void OnNavigatedTo(NavigationEventArgs e)
 {
            DomainService1 domainContext = new DomainService1();
            domainContext.Load(domainContext.GetPersonenQuery(), LoadCompleted, true);
            busyIndicator1.IsBusy = domainContext.IsLoading;
 }

 public void LoadCompleted(LoadOperation lo)
 {
           this.busyIndicator1.IsBusy = false;
  }

Das Resultat ist zufriedenstellend. Solange vom Service Daten geladen werden, wird nun das Datagrid deaktiviert und ein Ladebalken angezeigt.

Share and Enjoy:
  • Twitter
  • Print
  • Digg
  • Live
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Blogplay
  • DotNetKicks
  • MisterWong.DE
Kick it on dotnet-kicks.de

Ein Kommentar zu “Silverlight 4: BusyIndicator mit WCF RIA Services verwenden”

Hinterlasse einen Kommentar

Get Adobe Flash playerPlugin by wpburn.com wordpress themes