in

dotNet Umbria

Il primo User Group in Umbria sul mondo .Net

Paolo Possanzini

WPF: Costruiamo un RSS Reader passo 3 (TreeView)

Inseriamo la TreeView che conterrà la struttura ad albero dei feed sottoscritti.

[code language="XML"]

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:rssreader ="clr-namespace:WpfRssReader"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
    x:Class="WpfRssReader.MainForm"
    Title="Heros RSS Reader" Height="600" Width="800">

    <Grid Width="Auto" Height="Auto">
        <Grid.RowDefinitions>
            <RowDefinition Height="55"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <Grid Grid.Row="1" Grid.RowSpan="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
                <ColumnDefinition Width="3*"/>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="96"/>
                <RowDefinition Height="0.3*"/>
                <RowDefinition Height="0.6*"/>
            </Grid.RowDefinitions>

            <!-- Inseriamo la TreeView che conterrà i Feeds Sottoscritti -->
            <Border Grid.Row="1" Grid.RowSpan="2" BorderBrush="#FF000000" BorderThickness="1,1,1,1" CornerRadius="4,4,4,4" Padding="4,4,4,4">
                <TreeView Width="Auto" Height="Auto" BorderThickness="0,0,0,0" Name="tvFeedsFolders" />
            </Border>

        </Grid>
        <Rectangle Fill="#FF000000" Stroke="#FF000000" StrokeThickness="0" RadiusX="0" RadiusY="0" HorizontalAlignment="Stretch" Margin="0,0,0,0" Width="Auto"/>
        <TextBlock Margin="24,8,16,8" FontFamily="Segoe UI" FontSize="24" Foreground="#FFD5D5D5" Text="Heros {Community} RSS Reader" TextWrapping="Wrap"/>
    </Grid>
</Window>

[/code]

Inseriamo un oggetto di ObjectDataProvider per preparare il Binding.
Utilizziamo il metodo GetFeedSubTree dell'oggetto di tipo FeedHelper per popolare la TreeView

[code language="XML"]

<Window.Resources>
    <ObjectDataProvider x:Key="FeedTreeDS" ObjectType="{x:Type rssreader:FeedHelper}" MethodName="GetFeedSubTree" />
</Window.Resources>

[/code]

A questo punto andiamo ad inserire il binding all'interno dell'oggetto TreeView

[code language="XML"]

<TreeView
                    ItemsSource="{Binding Source={StaticResource FeedTreeDS}}"
                    Width="Auto"
                    Height="Auto"
                    BorderThickness="0,0,0,0" Name="tvFeedsFolders" />

[/code]

Inseriamo subito anche un'altro Grid che con i controlli necessari a sottoscrivere i feeds, per adesso inseriamo solo due textbox, una per il nome che vogliamo dare al feed ed una per l'uri
Posizioniamo questo nuovo Grid nella prima cella in alto a sinistra.

[code language="XML"]

<Grid Margin="0,0,0,0">
        <Rectangle Fill="#FFFFFFFF" Stroke="#FF000000" RadiusX="4" RadiusY="4" Margin="0,0,0,0"/>
        <TextBox Text="&lt;url&gt;" TextWrapping="Wrap" Margin="8,36,8,0" VerticalAlignment="Top" Name="txtUrl" />
        <TextBox Height="24" Text="&lt;nome&gt;" TextWrapping="Wrap" Margin="8,8,8,0" VerticalAlignment="Top" Name="txtNome" />
        <Button d:LayoutOverrides="Height" x:Name="btnSubscribe" Height="28" Content="Sottoscrivi" Click="btnSubscribe_Click" HorizontalAlignment="Right" Margin="0,0,8,8" VerticalAlignment="Bottom" Width="76"/>
    </Grid>

[/code]

Scriviamo il codice necessario a gestire l'evento Click del bottone che abbiamo inserito.
Il metodo dovrà controllare qual'è il folder selezionato nella Treeview ed inserire la sottoscrizione all'interno di quel folder.
Poi dovrà invocare il metodo FeedHelper.SubscribeFeed

[code language="C#"]

private void btnSubscribe_Click(object sender, RoutedEventArgs e)
{
  TreeViewItem tvi = tvFeedsFolders.SelectedItem as TreeViewItem;
  if (tvi != null)
  {
    IFeedFolder folder = null;

    folder = tvi.Tag as IFeedFolder;
    if (folder == null)
    {
      IFeed feed = tvi.Tag as IFeed;
      if (feed != null)
      {
        folder = feed.Parent as IFeedFolder;
      }
    }

    if (folder == null)
      folder = new FeedsManagerClass().RootFolder as IFeedFolder;

    FeedHelper.SubscribeFeed(folder, txtUrl.Text, txtNome.Text);
  }
}

[/code]

Ecco il risultato del lavoro svolto fino a questo momento

image

Only published comments... Apr 23 2008, 02:47 PM by Paolo Possanzini

About Paolo Possanzini

Programmatore di vecchia data, mi sono appassionato a dotnet fin dalla prima versione. Mi interesso di programmazione, accesso ai dati, Sql Server.
Con Andrea abbiamo fondato TeamDev snc.

Scarica il mio Biglietto da visita
dotNet Umbria 2007-2008
Powered by Community Server (Commercial Edition), by Telligent Systems