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="<url>" TextWrapping="Wrap" Margin="8,36,8,0" VerticalAlignment="Top" Name="txtUrl" />
<TextBox Height="24" Text="<nome>" 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
