Windows Phone 7 可以把它看成是Android 的 ListView ,WP7 只是预先在XAML里面为它的数据模板规定了格式,而Android 可以通过后期引入数据的方式为其添加数据模板。
Android 我们可以通过以下几种方式为LISTVIEW 添加数据,用法极其简单:
- 继承ListActivity,使用SetListAdapter,参考下面的代码。
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
setListAdapter(
new
ArrayAdapter
<
String
>
(
this
,
android.R.layout.simple_list_item_1,mStrings));
- 可自定义数据源,继承BaseAdapter ,参考下面代码。
自定义数据源
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
private
class
SlowAdapterextendsBaseAdapter{
private
LayoutInflatermInflater;
public
SlowAdapter(Contextcontext){
mContext
=
context;
mInflater
=
(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
/*
*
*Thenumberofitemsinthelistisdeterminedbythenumberofspeeches
*inourarray.
*
*@seeandroid.widget.ListAdapter#getCount()
*/
public
int
getCount(){
return
mStrings.length;
}
/*
*
*Sincethedatacomesfromanarray,justreturningtheindexis
*sufficenttogetatthedata.Ifwewereusingamorecomplexdata
*structure,wewouldreturnwhateverobjectrepresentsonerowinthe
*list.
*
*@seeandroid.widget.ListAdapter#getItem(int)
*/
public
ObjectgetItem(
int
position){
return
position;
}
/*
*
*Usethearrayindexasauniqueid.
*
*@seeandroid.widget.ListAdapter#getItemId(int)
*/
public
long
getItemId(
int
position){
return
position;
}
/*
*
*Makeaviewtoholdeachrow.
*
*@seeandroid.widget.ListAdapter#getView(int,android.view.View,
*android.view.ViewGroup)
*/
public
ViewgetView(
int
position,ViewconvertView,ViewGroupparent){
TextViewtext;
if
(convertView
==
null
){
text
=
(TextView)mInflater.inflate(android.R.layout.simple_list_item_1,parent,
false
);
}
else
{
text
=
(TextView)convertView;
}
if
(
!
mBusy){
text.setText(mStrings[position]);
//
Nulltagmeanstheviewhasthecorrectdata
text.setTag(
null
);
}
else
{
text.setText(
"
Loading...
"
);
//
Non-nulltagmeanstheviewstillneedstoloadit'sdata
text.setTag(
this
);
}
return
text;
}
/*
*
*Rememberourcontextsowecanuseitwhenconstructingviews.
*/
private
ContextmContext;
}
- 由于Android 默认提供了多种自定义数据源的格式模板给我们,所以用起来非常方便有多种可供选择:
SimpleAdapter,SimpleCursorAdapter,ArrayAdapter<?>等,具体可在具体的项目上实施使用。
本篇将着重介绍WP7 的ListBox 一个我自认为非常简单方便的数据绑定方法。并且通过Silverlight 特有的数据绑定方法在XAML绑定数据。本篇学习笔记将以一个呈现天气列表的LISTBOX的例,效果如下:
实现这个功能我们需要编写一个Model 己记录这些实体信息,Model代码如下:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
public
class
weather
{
public
string
Conditions{
get
;
set
;}
public
string
ImageUrl{
get
;
set
;}
public
string
Low{
get
;
set
;}
public
string
High{
get
;
set
;}
public
string
Location{
get
;
set
;}
public
weather(
string
conditins,
string
imageurl,
string
low,
string
high,
string
location)
{
this
.Conditions
=
conditins;
this
.ImageUrl
=
imageurl;
this
.Low
=
low;
this
.High
=
high;
this
.Location
=
location;
}
}
并且我们还需要一个类来做为ListBox 的数据源,前篇有讲过数据绑定的一篇文章提到过ObservableCollection 不知道大家还有没有印象,本篇就是使用这个数据集合来做ListBox 数据源,该类代码如下:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
public
class
weathers:List
<
weather
>
{
private
const
string
imageUrl
=
"
../images/
"
;
public
weathers()
{
BuildCollection();
}
public
ObservableCollection
<
weather
>
DataCollection{
get
;
set
;}
public
ObservableCollection
<
weather
>
BuildCollection()
{
DataCollection
=
new
ObservableCollection
<
weather
>
();
DataCollection.Add(
new
weather(
"
阴天
"
,imageUrl
+
"
19n.png
"
,
"
10度
"
,
"
20度
"
,
"
广州
"
));
DataCollection.Add(
new
weather(
"
凉爽
"
,imageUrl
+
"
23d.png
"
,
"
20度
"
,
"
25度
"
,
"
海南
"
));
DataCollection.Add(
new
weather(
"
多云
"
,imageUrl
+
"
26n.png
"
,
"
10度
"
,
"
18度
"
,
"
深圳
"
));
DataCollection.Add(
new
weather(
"
晴转多云
"
,imageUrl
+
"
27d.png
"
,
"
20度
"
,
"
23度
"
,
"
三亚
"
));
DataCollection.Add(
new
weather(
"
阴转多云
"
,imageUrl
+
"
27n.png
"
,
"
22度
"
,
"
23度
"
,
"
揭阳
"
));
DataCollection.Add(
new
weather(
"
晴天
"
,imageUrl
+
"
31d.png
"
,
"
22度
"
,
"
25度
"
,
"
汕头
"
));
return
DataCollection;
}
}
实体类和数据源代码编写完成后,接下来打开mainPage.xaml,添加一个命名空间:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
xmlns:data
=
"
clr-namespace:ListBoxDatBind
"
Tip:这里指定的是你的数据源所在的命名空间。
之后,添加一个页面的资源KEY
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
<
phone:PhoneApplicationPage.Resources
>
<
data:weathersx:Key
=
"
weatherCollection
"
/>
</
phone:PhoneApplicationPage.Resources
>
准备工作准备完成,为ListBox 绑定数据:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
<
ListBoxName
=
"
listBox1
"
ItemsSource
=
"
{BindingSource={StaticResourceweatherCollection},Path=DataCollection}
"
>
<
ListBox.ItemTemplate
>
<
DataTemplate
>
<
StackPanelOrientation
=
"
Horizontal
"
>
<
ImageSource
=
"
{BindingPath=ImageUrl}
"
/>
<
StackPanelOrientation
=
"
Vertical
"
>
<
TextBlockText
=
"
{BindingConditions}
"
/>
<
TextBlockText
=
"
{BindingLow}
"
/>
<
TextBlockText
=
"
{BindingHigh}
"
/>
<
TextBlockText
=
"
{BindingLocation}
"
/>
</
StackPanel
>
</
StackPanel
>
</
DataTemplate
>
</
ListBox.ItemTemplate
>
</
ListBox
>
运行的效果如上图。
个人觉得,要论数据绑定的话,还是Android 的 ListView 来得灵活一点,不过Wp 7 的数据绑定却在微软的封装下来得方便许多。
源码下载:
数据绑定