Проект кода [WP7] для CodeProject

Грэг Дункан

Сегодняшний проект – пример того, что приложения для Windows Phone не обязательно должны быть сложными. Также он позволит нам заглянуть на один из самых любимых сайтов по кодированию CodeProject с помощью одного из наших любимых устройств…

Приложение Codeproject для WindowsPhone

Введение

В этой статье предпринята попытка создать приложение (очень простое) для доступа к сайту Codeproject с мобильного телефона под управлением Windows Phone 7. В нем используется RSS-фид, предоставляемый Codeproject для обновлений данных приложения. Для чтения RSS я бессовестно использовал прикладные классы, написанные Ариком Познански (Arik Poznanski) и опубликованные в статье «Чтение элементов RSS на Windows Phone 7».

Исходный код требует для компиляции VS2010 и Windows Phone SDK 7.0, а также эмулятор Windows Phone для запуска. Для создания XAML-файлов я применил MS Expression Blend. Если вы хотите самостоятельно заняться этим, то соответствующие инструменты можно найти на странице https://www.microsoft.com/visualstudio/en-us/products/2010-editions/windows-phone-developer-tools.

Мотивация

CodeProject посещает более восьми миллионов пользователей, и их число быстро растет. Многие обращаются к этому сайту, чтобы идти в ногу с постоянно меняющимся миром разработки программного обеспечения. И для многих он является точкой входа для освоения новых концепций, технологий и механизмов. Раздел вопросов и ответов, который является наиболее оживленным, помогает отвлечься от повседневных проблем кодирования, и зачастую спрашивающий ждет не более пяти минут (конечно, если вопрос опубликован корректно и в правильной ветке) для того, чтобы получить ответ.

Меня немного опечалило, что для такой замечательной вещи нет мобильных приложений (по крайней мере, я не нашел ничего). И необходимость иметь их открыта для дискуссий.

В настоящее время CodeProject имеет мобильную версию сайта, в которой отсутствуют многое из существующего на традиционном сайте. Однако там есть ссылка, обеспечивающая доступ к полной версии сайта. Такой стратегии следуют многие, у которых есть постоянно меняющийся контент. Но по мере добавления новых функций к традиционному сайту, в мобильном обнаруживается тенденция к отставанию после нажатия пользователем кнопки полного размера на телефоне, что требует создания отдельного сайта для мобильных устройств.

Более того, приложение обеспечивает лучший интерфейс для просмотра одного и того же контента на мобильном устройстве, по сравнению с просмотром сокращенной версии сайта. По крайней мере, я так думаю. И это подвигло меня на разработку мобильного приложения.

Отложив всё это в сторону, задумайтесь, разве плохо иметь собственное мобильное приложение?

Я выбрал разработку приложения на Windows Phone, так как есть великолепные инструменты разработки и, кроме того, мне удобно работать с Visual Studio.

..."

clip_image002clip_image004clip_image006

Снимок решения:

clip_image008

Организация кода и страниц

Теперь посмотрим, как организованы и связаны страницы.

Файл MainPage.xaml содержит интерфейс пользователя для заполнения главного экрана приложения (как показано на рис.2). Если вы проанализируете этот файл, то можете удивиться, почему каждая кнопка обернута в рамочку. Она действительно нужна для того, чтобы скруглить углы кнопки. Так как нет способа задать радиус для угла, я использовал рамку и задал ее свойство CornerRadius, чтобы добиться нужного эффекта.

Щелчки по кнопкам обрабатываются в коде и, в зависимости от кнопки, мы будем доставать соответствующий RSS из массива _RSSFeed

 // string array to hold RSS feeds
 
urlstring[] _RSSFeed = {
 
  "https://www.codeproject.com/WebServices/ArticleRSS.aspx?cat=1", // All latest content
  "https://www.codeproject.com/WebServices/ArticleRSS.aspx?cat=2", // MFC/C++ latest content
  "https://www.codeproject.com/WebServices/ArticleRSS.aspx?cat=3", // C# latest content
  "https://www.codeproject.com/WebServices/ArticleRSS.aspx?cat=6", // VB latest content
  "https://www.codeproject.com/WebServices/ArticleRSS.aspx?cat=4", // ASP latest content
  "https://www.codeproject.com/WebServices/ArticleRSS.aspx?cat=18", // Mobile latest content
  "https://www.codeproject.com/webservices/LoungeRss.aspx" // Lounge latest content
};

Используя метод NavigationService.Navigate, мы затем перейдем к ArticleView.xaml и полученный RSS URL передается в ArticleView.xaml как значение с ключом 'RSSFeed'.

 NavigationService.Navigate(new Uri("/views/ArticleView.xaml?RSSFeed=" +
                              _RSSFeed[(int)RSSCategory.AllArticlesRSS], UriKind.Relative));

В событии OnNavigatedTo файла ArticleView это значение возвращается обратно.

 protected override void OnNavigatedTo(NavigationEventArgs e)
{
 
    string strTemp;
    NavigationContext.QueryString.TryGetValue("RSSFeed", out strTemp);
    // ......
    // ......
}

URL RSS-фида разбирается с помощью вспомогательного класса RssService и данные запоминаются в классе RssItem. В дальнейшем он работает как источник элементов для списка, образуя удивительный вид как показано на рисунках 4 и 5.

Детали, касающиеся RSS-фидов и способов их разбора лучше объяснены в статье «Чтение элементов RSS на Windows Phone 7». Я не хочу отталкивать читателей, дублируя эту информацию. Вы всегда можете обратиться к этой замечательной статье.

 protected override void OnNavigatedTo(NavigationEventArgs e)
{
 
   // .....
   // .....
 
   // Fetch the RSS items using the helper and set this to the listbox controls
WindowsPhone.Helpers.RssService.GetRssItems(
                             PhoneApplicationService.Current.State["RSSFeed"].ToString(),
                             (items) => { listbox.ItemsSource = items; },
                             (exception) => { MessageBox.Show(exception.Message); }, null )
;}

Как видно из файла ArticleView.xaml, этот список дополняет кнопку гиперссылки и два текстовых блока, которые привязаны соответственно к Title, PublishedDate и PlainSummary.

...

Итак, как видно, это приложение не является ни сложным, ни запутанным, в нем нет множества движущихся частей и что построение аналогичного приложения для того или иного сайта совсем не трудно.