Jestem fanem prostych rozwiązań. Czytam ostatnio pewną ciekawą książkę o WPF-fie (napiszę recenzję już niedługo) i autor podał prosty jak barszcz przepis na klienta twittera napisanego tylko za pomocą XAML-a. Poniżej kody, link do repozytorium i opis co i jak. Zapraszam!
Kod
Cały kod przedstawia się tak:
<Window x:Class="XamlOnlyTwitterClient.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="XamlOnlyTwitterCilent" Height="350" Width="525"> <Window.Resources> <XmlDataProvider x:Key="Feed" Source="http://twitrss.me/twitter_user_to_rss/?user=VisualStudio" ></XmlDataProvider> </Window.Resources> <DockPanel DataContext="{Binding Source={StaticResource Feed}, XPath=/rss/channel/item}"> <TextBox DockPanel.Dock="Top" Text="{Binding Source={StaticResource Feed}, BindsDirectlyToSource=True, Path=Source, UpdateSourceTrigger=PropertyChanged}"> </TextBox> <Label DockPanel.Dock="Top" Content="{Binding XPath=/rss/channel/title}" FontSize="14" FontWeight="Bold"/> <Label DockPanel.Dock="Top" Content="{Binding XPath=/rss/channel/description}" FontSize="14" FontWeight="Bold"/> <ListBox DockPanel.Dock="Left" DisplayMemberPath="title" ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True" Width="300"/> <Frame Source="{Binding XPath=link}"/> </DockPanel> </Window>
Opis
Wszystko opiera się o dwa kluczowe elementy.
- WPF posiada klasę „XmlDataProvider”, która umożliwia podłączanie źródeł danych w formacje XML-a (nie ma wbudowanego json-a)
- W czasie używania wiązania danych można używać języka XPath aby dostać się do odpowiednich elementów.
Opis szczegółowy
- W TextBox wykorzystywane jest wiązanie typu TwoWay, właściwość ta jest połączona z właściwością Source obiektu XmlDataProivider więc można zmienić wartość Source w czasie działania programu
- Aby XmlDataProvider dobrze radził sobie z dowiązaniem Source, ustawiamy BindsDirectlyToSource na true. Inne ustawienie powoduje błędy podczas parsowania xml-a. (warto zapamiętać)
- Obiekt Binding dla TextBox-a korzysta z UpdateSourceTrigger dla PropertyChanged, więc odświeżanie danych jest wykonywane przy każdej próbie naciśnięcia klawisza.
- Wartość DisplayMemberPath w ListBox-ie jest wyrażeniem XPath pobierającym element „title” z każdego elementu (to jest extra!)
- Elementy ListBox i Frame zapewniają widok typu nadrzędny-podrzędny poprzez współdzielenie tego smego źródła danych.
- Kontrolki Frame używamy, bo w WPF-fie zinterpretować HTML można tylko w kontrolce Frame i WebBrower.
- Dodatkowo kontrolka Frame udostępnia przyciski nawigacyjne.
Efekt poniżej (gotowa aplikacja WPF)
Żródło
Kodu jest nie wiele ale i tak udostępniam go na githubie. Zapraszam do przetestowania.
https://github.com/przemekwa/XAMLOnlyTwitterClient
Super aplikacja, zmieniłem tylko źródło XmlDataProivider na http://helenow.az.pl/blog/x5feed.php i zamiast czytnika tweetów mam czytnik kanałów rss :-)
Wielkie dzięki za ten przykład.
Nie ma sprawy. Byłem pod takim wrażeniem, że musiałem się tym podzielić. Dzięki za info. Wesołych świąt : )