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 的数据绑定却在微软的封装下来得方便许多。

源码下载:

数据绑定

更多相关文章

  1. Android(安卓)进程间通信(IPC)
  2. 在Android中查看和管理sqlite数据库
  3. 使用AudioTrack播放PCM音频数据(android)
  4. android 应用程序数据共享shareuserid篇+ContentResolver+Conten
  5. Android之MPAndroidChart库使用说明(柱状图、折线图、饼图和组合
  6. Android解析服务器端发来的xml数据示例
  7. Android笔试(一)
  8. Android(安卓)App开发总结
  9. android sqlite 数据类型

随机推荐

  1. android视图继承关系
  2. Android通过PagerSnapHelper改造Recycler
  3. Android文件系统的结构及目录用途、操作
  4. 查询存储空间的代码
  5. Android SDK等下载说明
  6. Android 命名空间和自定义属性
  7. Android JNI详述(二)
  8. Android实现CBC加解密
  9. Android(安卓)Studio增量更新(Mac)
  10. EditText无法获取焦点(android:descendant