Silverlight Themes einbinden dynamische TabItems mittels Data Binding Datenkommunikation mittels JSON
Kommentare

Die Silverlight-Kolumne „Silverlight Expertise“ des dot.NET Magazins präsentiert monatlich leckere Top-How-tos zum Thema Silverlight von Gregor Biswanger, sodass Einsteiger und Fortgeschrittene Silverlight-Experten durch geballtes Wissen gesättigt werden. Neu dazu kommt jeweils ein How-to zur Windows-Phone-7-Entwicklung. Heute stehen auf der Menükarte „Silverlight Themes einbinden“, „dynamische TabItems mittels Data Binding“ und „Datenkommunikation mittels JSON“. Viel Spaß und einen guten Appetit!

Das Frontend einer Silverlight-Anwendung kann eigentlich eigenständig von einem Screen-Designer gestaltet werden. Jedoch sieht es in der Realität oft ganz anders aus: Der Entwickler selbst muss sich um das Design kümmern. In diesem Fall gibt es eine Verstärkung durch das kostenfreie Silverlight Toolkit. Hier werden zwölf unterschiedliche Themes zur Verfügung gestellt. Diese können einfach im XAML deklariert werden oder es kann von Visual Studio/Expression Blend mittels Drag and Drop geschehen. Zu Beginn muss das Silverlight Toolkit [1] heruntergeladen und installiert werden. Dann referenziert man folgende Assemblies:

System.Windows.Controls.Theming.Toolkit.dll und System.Windows.Controls.Theming.[Name des Themes].dll. Diese müssen im XAML via XML Namespace verknüpft werden. Dann sollte man das Theme außerhalb des Standard-LayoutRoot-Elements deklarieren (Listing 1). So werden dann alle Kinderelemente mit dem neuen Theme bestückt. Microsoft hat zudem vier weitere Themes unabhängig vom Silverlight Toolkit unter den Namen Silverlight 4 Application Themes [2] veröffentlicht. Im Einzelnen handelt es sich um folgende Themes: JetPack, Accent Color, Windows 7 und Cosmopolitan.

Listing 1: Themes unter Silverlight einbinden


    
    
        
            
            
Menü 2 für Experten: dynamische TabItems mittels Data Binding

Silverlight bietet mit dem Navigation-Framework eine gute Lösung, um unterschiedliche Inhalte zu trennen. Allerdings kann aus spezieller Usability-Sicht auch eine Aufteilung innerhalb eines TabControls erforderlich sein. Dazu müssten die UserControls dynamisch mittels Data Binding das TabControl füllen. Das einzige Problem hierbei lautet: das TabControl kann nur TabItems entgegennehmen. Bei solchen Anforderungen helfen ValueConverter. Als Beispiel wird ein ValueConverter verwendet, der ein UserControl zu einem TabItem konvertiert (Listing 2).

Listing 2: UserControls zu TabItems konvertieren

public class TabConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        ObservableCollection applicationControls = (ObservableCollection) value;
        List tabItems = new List();

        foreach (UserControl applicationControl in applicationControls)
        {

            TabItem tabItem = new TabItem();
            tabItem.Content = applicationControl;
           
            tabItems.Add(tabItem);
        }

        return tabItems;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value;
    }
}
  

Die Deklaration des Converters in XAML zeigt Listing 3.

Listing 3: Den UserControlToTabItemConverter im XAML deklarieren


  
  



  

  
Menü 3 für Windows Phone 7: Datenkommunikation mittels JSON

Die meisten Windows-Phone-7-Anwender haben keine unbegrenzte Datenflatrate. Aus diesem Grund ist es wichtig, die Datennutzung zu optimieren. Es ist kein Geheimnis, dass JSON (JavaScript Object Notation) das effizienteste Nachrichtenformat ist. Windows Phone 7 unterstützt JSON mit der DataContractJsonSerializer-Klasse. Sie serializiert JSON-Datenströme zu CLR-Objekten. Listing 4 veranschaulicht die einfache Verwendung dieser Klasse.

Listing 4: Windows Phone 7 mit JSON Serializer

public void GetCustomers()
{
    WebClient webClient = new WebClient();
    webClient.GetCustomersCompleted += OnGetCustomersCompleted;  
    webClient.GetCustomersAsync(new Uri(".."));
}

public void OnGetCustomersCompleted(object sender, CustomersCompletedEventArgs e)
{
    MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(e.Result));
    
    ObservableCollection customers = new ObservableCollection();
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(ObservableCollection));
    customers = (ObservableCollection)serializer.ReadObject(memoryStream);
}
  

Gregor Biswanger ist Microsoft MVP für Client App Dev und arbeitet als Solution Architect und Silverlight-Experte in der Firma impuls Informationsmanagement GmbH in Nürnberg. Seine Schwerpunkte sind die .NET-Architektur, Silverlight und agile Prozesse. Er veröffentlichte vor Kurzem seine DVD mit Videotrainings zum Thema „WPF 4 und Silverlight 4“ bei Addison-Wesley von video2brain. Biswanger ist auch freier Autor, Speaker und Microsoft CLIPler der INdotNET (Ingolstädter .NET Developers Group). Sie erreichen seinen Blog unter www.dotnet-blog.net.
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -