代码改变世界

WindowsPhone7开发简单豆瓣网应用程序之主页面功能实现

2011-06-06 22:31  王祖康  阅读(2146)  评论(7编辑  收藏  举报

WindowsPhone7开发简单豆瓣网应用程序之主页面功能实现

   在上一篇博文当中介绍了豆瓣应用程序的界面设计,那么这些界面是如何实现功能呢?下面我讲代码分享给大家。

    主页面图:

 

大家可以看到主界面我们需要实现三种功能的搜索(搜书,搜乐,搜影)。由于这三种搜索的后台实现代码雷同,这里我以搜书为例。

1) 首先我们需要实例化WebClient对象,这里由于三种类型的搜索调用WebClient对象方法基本上一致,所有我把这些封装到一个通用类当中(MyWebClient.cs)。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中添加如下代码:

 

绑定书籍信息

 

    鼠标点击事件

 

根据选择某一项进行跳转并传递id值。

3) 在MainPage.xaml.cs中还需要调用:DoubanDAL.cs;DouBanBook.cs及Navigation.cs。

 

4) 在DoubanDAL.cs中我们封装了搜索书籍,音乐,视频的通用属性信息搜索方法。代码如下:

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
{
#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
{
#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中封装了我们需要查询的一些书籍信息的属性。代码如下:

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中我们利用枚举实现页面跳转。代码如下:

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;

}
}
}

这样我们就实现了主页面的搜索及跳转功能。