Читалка блогов для Windows Phone 7. Часть 1. Список RSS лент

Недавно мне предложили найти или сделать читалку для RSS ленты для одного из сайтов. Роясь в интернете я нашел хороший класс который парсит RSS xml файлы и представляет их в ListBox. Потом я решил сделать читалку для своего блога. Я добавил до программы еще одну страницу и считывая html, примитивно его парсил. Но на этом я не остановился, сразу после того как читалка блога была готова я подумал: “А не сделать бы мне программу для чтения нескольких RSS лент, с возможностью чтения статьей?”. И я ее написал 🙂

Первой страницей в программе есть Список Блогов. Тут выводятся все ленты которые пользователь захочет читать (не больше 10ти).

bloglist

Если приложение только установлено, то нету ни одной ленты. Для того что бы ее добавить нужно нажать кнопку “Add feed”. Откроется окно в котором нужно ввести URL адрес RSS ленты(обязательное поле), название и описание. Добавлю свой блог:

addfeed

Теперь если нажать кнопку “Add” то увидим что блог добавился в список на главную страницу:

bloglist1

Теперь рассмотрим процесс добавления на программном уровне. Если мы нажимаем на кнопку Add, то сначала проверяется или был введен адрес ленты, и если он не введен то выводится сообщение.


if (textBox1.Text == "")
{
    MessageBox.Show("Enter the URL", "Message", MessageBoxButton.OK);
}

addfeederror

Потом в цикле подбирается ключ к свободной ячейке в IsolatedStorage и данные с полей записываются в память телефона. И уже через класс NavigationService  переходим назад к Списку Блогов.

NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));

Если нажать то программа переходит на предыдущую страницу ничего не сохраняя:

private void button2_Click(object sender, RoutedEventArgs e)
{
    if (NavigationService.CanGoBack)
        NavigationService.GoBack();
}

Еще тут обрабатывается нажатие кнопки Back, если ее нажать то появиться сообщение, которое спрашивает или точно пользователь хочет выйти из этого окна.

private void Press_Back(object sender, System.ComponentModel.CancelEventArgs e)
{
    if (MessageBox.Show("Are you sure?", "Message", MessageBoxButton.OKCancel) == MessageBoxResult.Cancel)
    {
        e.Cancel = true;
    }
}

addfeedback

На этом процесс добавления закончен, теперь посмотрим как программа считывает  с памяти ленты и записывает их в блоги.

Для отображения блогов созданий ListBox, который в себе имеет StackPanel, которая в свое время в себе имеет два TextBlock.

<ListBox HorizontalAlignment="Left" Margin="10,90,0,0" Name="listBox1" Width="440" VerticalAlignment="Top" SelectionChanged="listBox1_SelectionChanged" Foreground="Black">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical" Height="150" Width="440">
                <TextBlock TextWrapping="Wrap" Text="{Binding FeedTitle}" Foreground="#FFC8AB14" FontSize="28" Height="35" TextAlignment="Left" MaxWidth="440" Name="LbTitle" />
                <TextBlock TextWrapping="Wrap" Text="{Binding FeedDetails}" FontSize="18" Height="97" TextAlignment="Left" MaxWidth="440" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Во время загрузки страницы, в цикле подбираются ключи, провирается наличие данных в памяти под текущим ключом и информация записывается в ListBox.

List<RSSFeed> list = new List<RSSFeed>();
int n =0;
for (int i = 1; i < 11; i++)
{
    if (IsolatedStorageSettings.ApplicationSettings.Contains(i.ToString()))
    {
        RSSFeed feed = new RSSFeed
        {
            FeedTitle = IsolatedStorageSettings.ApplicationSettings[i.ToString()].ToString(),
            FeedDetails = IsolatedStorageSettings.ApplicationSettings[i.ToString() + i.ToString()].ToString(),
            FeedURL = IsolatedStorageSettings.ApplicationSettings[i.ToString() + i.ToString() + i.ToString()].ToString(),
            Key = i.ToString()
        };
        list.Add(feed);
        n++;
    }
}
listBox1.ItemsSource = list;

Еще в переменную n записывается количество блогов, и если оно больше или равно 10, то кнопка добавления блога становится неактивной:

if (n >= 10)
{
    Add.IsEnabled = false;
}

По нажатию на кнопку Add feed переходим на нужную страницу:

private void Add_Click(object sender, RoutedEventArgs e)
{
    NavigationService.Navigate(new Uri("/AddFeed.xaml",UriKind.Relative));
}

При нажатии на пункт с списка программа передает свойству класса parametrs нужные параметры ленты и переходит на страницу RSS ленты:

private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    // Откритие ленты
    if (listBox1.SelectedItem == null)
       return;
    parametrs p = new parametrs();
    p.Title = ((RSSFeed)listBox1.SelectedItem).FeedTitle.ToString();
    p.Details = ((RSSFeed)listBox1.SelectedItem).FeedDetails.ToString();
    p.URL = ((RSSFeed)listBox1.SelectedItem).FeedURL.ToString();
    p.Key = ((RSSFeed)listBox1.SelectedItem).Key.ToString();
    NavigationService.Navigate(new Uri("/MainPage1.xaml", UriKind.Relative));
}

Об чтении RSS ленты и поста я напишу в следующих частях…

Реклама

1 комментарий

  1. Уведомление: Читалка блогов для Windows Phone 7. Часть 2. Чтение RSS ленты « Личный блог Ивана Белко

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s