WindowsPhone7开发简单豆瓣网应用程序之主页面功能实现
在上一篇博文当中介绍了豆瓣应用程序的界面设计,那么这些界面是如何实现功能呢?下面我讲代码分享给大家。
大家可以看到主界面我们需要实现三种功能的搜索(搜书,搜乐,搜影)。由于这三种搜索的后台实现代码雷同,这里我以搜书为例。
1) 首先我们需要实例化WebClient对象,这里由于三种类型的搜索调用WebClient对象方法基本上一致,所有我把这些封装到一个通用类当中(MyWebClient.cs)。MyWebClient.cs中代码如下:
WebClient client =
new WebClient();
public delegate bool MyWebClientDe(
string xmlFile);
MyWebClientDe _myDelegete;
/// <summary> /// 回调函数设置获得返回的字符串 /// </summary> /// public bool IsBusy()
{
return client.IsBusy;
}
public MyWebClientDe myDelegete
{
get {
return _myDelegete; }
set { _myDelegete = value; }
}
public MyWebClient()
{
client.Encoding = Encoding.UTF8;
client.DownloadStringCompleted +=
new DownloadStringCompletedEventHandler(client_DownloadStringCompleted);
}
void client_DownloadStringCompleted(
object sender, DownloadStringCompletedEventArgs e)
{
if (myDelegete !=
null)
{
if (e.Error ==
null)
{
myDelegete(e.Result);
}
else {
MessageBox.Show(e.Error.Message.ToString());
}
}
else MessageBox.Show(
"未指定代理函数!");
}
public bool DownloadStringAsync(
string Api)
{
try {
if (!client.IsBusy)
{
client.DownloadStringAsync(
new Uri(Api));
return true;
}
else {
return false;
}
}
catch {
return false;
}
}
2) 随后我们需要在MainPage.xaml.cs中添加如下代码:
3) 在MainPage.xaml.cs中还需要调用:DoubanDAL.cs;DouBanBook.cs及Navigation.cs。
4) 在DoubanDAL.cs中我们封装了搜索书籍,音乐,视频的通用属性信息搜索方法。代码如下:
MyWebClient myclinet =
new MyWebClient();
public List<DouBanBook> GetBook(
string xmlFile)
{
try {
string ns1 =
"{http://www.w3.org/2005/Atom}"; var xml1 = XDocument.Parse(xmlFile); var slist = from one in xml1.Descendants(ns1 + "entry") select new DouBanBook() { Titile = one.Element(ns1 + "title").Value, Images = (from cone in one.Elements(ns1 + "link") where cone.Attribute("rel").Value == "image" select cone.Attribute("href").Value).First<string>(), Id = one.Element(ns1 + "id").Value }; return slist.ToList<DouBanBook>(); } catch { return null; } } public List<DouBanMusic> GetMusic(string xmlFile) { try { 解析查询出来的xml文件#region 解析查询出来的xml文件 string ns1 = "{http://www.w3.org/2005/Atom}"; var xml1 = XDocument.Parse(xmlFile); //MessageBox.Show(xml1.ToString()); var slist = from one in xml1.Descendants(ns1 + "entry") select new DouBanMusic() { Titile = one.Element(ns1 + "title").Value, Images = (from cone in one.Elements(ns1 + "link") where cone.Attribute("rel").Value == "image" select cone.Attribute("href").Value).First<string>(), Id = one.Element(ns1 + "id").Value }; #endregion return slist.ToList<DouBanMusic>(); } catch { return null; } } public List<DouBanVideo> GetVideo(string xmlFile) { try { 解析查询出来的xml文件#region 解析查询出来的xml文件 string ns1 = "{http://www.w3.org/2005/Atom}"; var xml1 = XDocument.Parse(xmlFile); var slist = from one in xml1.Descendants(ns1 + "entry") select new DouBanVideo() { Titile = one.Element(ns1 + "title").Value, Images = (from cone in one.Elements(ns1 + "link") where cone.Attribute("rel").Value == "image" select cone.Attribute("href").Value).First<string>(), Id = one.Element(ns1 + "id").Value }; #endregion return slist.ToList<DouBanVideo>(); } catch { return null; } } 5) 在DouBanBook.cs中封装了我们需要查询的一些书籍信息的属性。代码如下:
//图片路径 public string Images { get; set; }
//标题 public string Titile { get; set; }
//ID public string Id { get; set; }
//作者 public string author { get; set; }
//简介 public string suammary { get; set; }
//价格 public string price { get; set; }
//出版人 public string publisher { get; set; }
public string authorInfo { get; set; }
6) 在Navigation.cs中我们利用枚举实现页面跳转。代码如下:
public enum ApplicationPages
{
Book,
Music,
Video
}
public static class Navigation
{
public static void GoToPage(
this PhoneApplicationPage phoneApplicationPage, ApplicationPages applicationPage,
string Id)
{
switch (applicationPage)
{
case ApplicationPages.Book:
phoneApplicationPage.NavigationService.Navigate(
new Uri(
"/Views/BookPage.xaml?id="+Id ,UriKind.Relative));
break;
case ApplicationPages.Music:
phoneApplicationPage.NavigationService.Navigate(
new Uri(
"/Views/MusicPage.xaml?id=" + Id, UriKind.Relative));
break;
case ApplicationPages.Video:
phoneApplicationPage.NavigationService.Navigate(
new Uri(
"/Views/VideoPage.xaml?id=" + Id, UriKind.Relative));
break;
}
}
}
本文转自 王祖康 51CTO博客,原文链接:http://blog.51cto.com/wzk89/582045 ,如需转载请自行联系原作者