Tworzenie aplikacji RIA w Silverlight 5 - Przegląd dodatkowych możliwości
Autor: Tomasz Kowalczyk
Opublikowano: 2012-09-24
Jest to ostatnia część serii prezentującej nowości Silverlight 5. Poniższy artykuł stanowi uzupełnienie poprzednich oraz przedstawia możliwości frameworka, które są bardzo interesujące z punktu widzenia programisty. Ciężko było je dopasować tematycznie do poprzednich artykułów.
Po przeczytaniu tego tekstu dowiesz się:
- jak przechwytywać wielokliki myszki w obrębie danego komponentu,
- co to jest
PivotViewer
i jak tego użyć z poziomu Silverlight 5, - jak w pełni wykorzystać możliwości kilku procesorów komputera, korzystając z TPL (Task Parallel Library) w Silverlight 5.
Implementacja
Do poniższego artykułu wchodzą jako załącznik trzy projekty. Każdy z projektów zawiera przykładowy program, prezentujący daną funkcję.
Informacja |
Wszystkie kody źródłowe projektów, utworzonych w ramach artykułów, będą dostępne na tej stronie. |
Obsługa wieloklików
Aby zaprezentować sposób przechwycenia kliknięć myszką na danym elemencie, przygotowany został prosty komponent TextBlock, w którym umieszczana będzie aktualna liczba kliknięć dokonanych przez użytkownika na danym elemencie:
<Grid x:Name="LayoutRoot" Background="White">
<TextBlock Height="152" HorizontalAlignment="Center" x:Name="textBlock1" Text="0" VerticalAlignment="Center" Width="244" Foreground="#FF2E5EFF" FontSize="96" TextAlignment="Center" MouseLeftButtonDown="txtB__MouseLeftButtonDown" />
</Grid>
Następnie, w code-behind należy odwołać się w metodzie zdarzeniowej, uruchamianej podczas kliknięcia lewym przyciskiem myszy, do parametru ClickCount
zdarzenia MouseButtonEventArgs
. Parametr ten przechowuje liczbę kliknięć dokonanych na komponencie, który wywołuje zdarzenie:
private void txtB__MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
textBlock1.Text = e.ClickCount.ToString();
}
Efekt, tak przygotowanego programu, można zobaczyć na Rys. 1. Obsługa wieloklików.
Rys. 1. Obsługa wieloklików.
PivotViewer
PivotViewer jest to komponent, którego użycie powinno znaleźć swoje zastosowanie w przypadku pracy z dużą liczbą danych. Pozwala on na efektywne ładowanie danych na stronę Web oraz komfortową pracę z nimi.
W celu pokazania możliwości komponentu utworzona została przykładowa klasa Book
, która będzie modelem danych w projekcie:
public class Book
{
public string Title { get; set; }
public string Description { get; set; }
public string Author { get; set; }
}
PivotViewer pracuje na kolekcji obserwowanej, czyli takiej, dla której zmiana stanów elementów składowych zostanie zgłoszona do programu. Przykładowa kolekcja przechowująca książki, będące obiektami klasy Book
, została zadeklarowana w projekcie pod nazwą books
i wypełniona danymi:
books = new ObservableCollection<Book>();
for (int i = 0; i < 500; i++)
{
books.Add(
new Book()
{
Title = "Silverlight 5 part: " + i.ToString(),
Author = "Tomasz Kowalczyk",
Description = "Very intresting book about Silverlight 5 features."
});
}
Następnie, w pliku widoku MainPage.xaml
został utworzony obiekt pivot, komponentu PivotViewer
, o identyfikatorze BookPivot
:
<pivot:PivotViewer x:Name="BookPivot"
AccentColor="LightGreen"
Background="LightGray"
ControlBackground="LightYellow"
SecondaryBackground="AntiqueWhite"
SecondaryForeground="Bisque"
SecondaryItemValueBackgroundColor="Chocolate" >
Tak utworzony obiekt musi zostać jeszcze wypełniony danymi. W tym celu należy przypisać do atrybutu ItemSource
kolekcje obiektów, które zostaną wyświetlone we wcześniej utworzonym komponencie PivotViewer
:
BookPivot.ItemsSource = books;
Efekt tak przygotowanego programu można zobaczyć na Rys. 2. PivotViewer.
Rys. 2. PivotViewer.
Informacja |
Więcej informacji na temat komponentu PivotViewer można znaleźć na stronie opisującej jego możliwości. |
Task Parallel Library
W najnowszej odsłonie frameworka Silverlight programista ma możliwość czerpania korzyści z Task Parallel Library. Warto zwrócić uwagę na fakt, że nie obsługuje on w pełni biblioteki TPL, znanej z .NET 4, wiele funkcji jest jednak dostępnych (zwłaszcza te odpowiadające za wywołania asynchroniczne), dzięki czemu tworzone oprogramowanie może wykorzystać potencjał wielordzeniowych maszyn.
Aby przedstawić możliwości wywołań asynchronicznych, które znajdują swoje zastosowanie zwłaszcza w przypadku komunikacji z serwisami internetowymi, projekt przygotowany na potrzeby tego artykułu zawiera program, pobierający dane z pliku *.xml, znajdującego się na serwerze. Swoje zastosowanie znajduje tutaj klasa Task, która łączy się z serwisem poprzez obiekt klasy HttpWebRequest, wywołując statyczną metodę Task.Factory.FromAsync, uzyskując odpowiedź, zapisaną jako obiekt klasy WebResponse, w postaci pliku XML. Przykładowy kod źródłowy, przedstawiony poniżej, zawiera również odpowiedzi zwracane przez serwer, co świadczy o asynchronicznej komunikacji programu z serwisem Web:
string uri = "https://localhost:56442/books.xml";
var request = HttpWebRequest.Create(uri);
var webTask = Task.Factory.FromAsync<WebResponse>(
request.BeginGetResponse, request.EndGetResponse, null)
.ContinueWith(
task =>
{
var response = (HttpWebResponse)task.Result;
var stream = response.GetResponseStream();
var reader = new StreamReader(stream);
string xmlFileText = reader.ReadToEnd();
Debug.WriteLine("Method: " + response.Method);
Debug.WriteLine("Status Code: " + response.StatusCode);
Debug.WriteLine("Status Description: " + response.StatusDescription);
Debug.WriteLine(xmlFileText);
});
Efekt tak przygotowanego programu można zobaczyć na Rys. 3. Przykład użycia TPL.
Rys. 3. Przykład użycia TPL.
Podsumowanie
W tym artykule poznaliśmy trzy niezwykle ciekawe funkcje, jakie mamy do dyspozycji, pisząc oprogramowanie w Silverlight 5. Była to ostatnia cześć 9-odcinkowej serii, której celem było przedstawić nowości zawarte w piątej odsłonie frameworka.