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;
}
}
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中添加如下代码:
绑定书籍信息
鼠标点击事件
根据选择某一项进行跳转并传递id值。
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;
}
}
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; }
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;
}
}
}
{
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,如需转载请自行联系原作者