WPF – klient Twittera tylko w XAML=u

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

  1. 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
  2. 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ć)
  3. 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.
  4. Wartość DisplayMemberPath w ListBox-ie jest wyrażeniem XPath pobierającym element „title” z każdego elementu (to jest extra!)
  5. Elementy ListBox i Frame zapewniają widok typu nadrzędny-podrzędny poprzez współdzielenie tego smego źródła danych.
  6. Kontrolki Frame używamy, bo w WPF-fie zinterpretować HTML można tylko w kontrolce Frame i WebBrower.
  7. Dodatkowo kontrolka Frame udostępnia przyciski nawigacyjne.

Efekt poniżej (gotowa aplikacja WPF)

twitter_zrzut

Żródło

Kodu jest nie wiele ale i tak udostępniam go na githubie. Zapraszam do przetestowania.

https://github.com/przemekwa/XAMLOnlyTwitterClient

3 komentarze do “WPF – klient Twittera tylko w XAML=u

    1. Nie ma sprawy. Byłem pod takim wrażeniem, że musiałem się tym podzielić. Dzięki za info. Wesołych świąt : )

  1. Pingback: dotnetomaniak.pl

Możliwość komentowania została wyłączona.