win8 ListView基础

在win8应用中,ListView是非常常见的一种组织数据的容器,本文简单地介绍LisiView的一些基本使用.

首先是在显示ListView的html中加入ListView的标签

<div id="basicListView" 
    data-win-control="WinJS.UI.ListView">  
</div>
接下来是需要定义listView中的数据,一般是另外定义一个js文件进行管理.新建一个dataExample的js文件,然后在该文件中,实现一个匿名并且是strict mode 的function.

(function () {
    "use strict";

})();
接下来实现数据的定义,并生成可以供listView使用的类型

(function () {
    "use strict";

    var dataArray = [
    { title: "Basic banana", text: "Low-fat frozen yogurt", picture: "images/60banana.png" },
    { title: "Banana blast", text: "Ice cream", picture: "images/60banana.png" },
    { title: "Brilliant banana", text: "Frozen custard", picture: "images/60banana.png" },
    { title: "Orange surprise", text: "Sherbet", picture: "images/60orange.png" },
    { title: "Original orange", text: "Sherbet", picture: "images/60orange.png" },
    { title: "Vanilla", text: "Ice cream", picture: "images/60vanilla.png" },
    { title: "Very vanilla", text: "Frozen custard", picture: "images/60vanilla.png" },
    { title: "Marvelous mint", text: "Gelato", picture: "images/60mint.png" },
    { title: "Succulent strawberry", text: "Sorbet", picture: "images/60strawberry.png" }
    ];

    var dataList = new WinJS.Binding.List(dataArray); 

})();
由于我们是用匿名的function,所以在function中的所有成员都是私有的,为了让html文件可以使用这个数据,我们需要让dataList是可访问的,可以使用WinJS.Namespace.define方法来构建一个名空间,并将dataList作为他的成员.

var publicMembers =
        {
            itemList: dataList 
        };
    WinJS.Namespace.define("DataExample", publicMembers); 

定义好数据之后,接下来就是在html中进行绑定了

首先需要先在html中声明引用这个js文件

<script src="/js/dataExample.js"></script>
下面便是在ListView中绑定数据源

div id="basicListView"
    data-win-control="WinJS.UI.ListView"
    data-win-options="{ itemDataSource : DataExample.itemList.dataSource }">
</div>  
itemDataSource需要的参数是一个 IListDataSource对象.我们的DataList并不是这样一个对象,不过DataList有一个dataSource属性,就是用来返回一个IListDataSource对象的.

到这里 就已经把数据绑定好了 现在运行程序的话  不会像我们预想中的那样 显示图片和文字 而是显示下面这样的东西

    { title: "Basic banana", text: "Low-fat frozen yogurt", picture: "images/60banana.png" },
    { title: "Banana blast", text: "Ice cream", picture: "images/60banana.png" },
    { title: "Brilliant banana", text: "Frozen custard", picture: "images/60banana.png" },
    { title: "Orange surprise", text: "Sherbet", picture: "images/60orange.png" },
    { title: "Original orange", text: "Sherbet", picture: "images/60orange.png" },
    { title: "Vanilla", text: "Ice cream", picture: "images/60vanilla.png" },
    { title: "Very vanilla", text: "Frozen custard", picture: "images/60vanilla.png" },
    { title: "Marvelous mint", text: "Gelato", picture: "images/60mint.png" },
    { title: "Succulent strawberry", text: "Sorbet", picture: "images/60strawberry.png" }
显示的就是这些数据,之所以会这样的原因,是因为我们并没有定义ListView中的item应该要这么样来展示数据,下面就来定义Item.

定义Item使用到Template,也就是每个item都是以这个模版作为显示的,和ios中的cell一样的.

<div id="mediumListIconTextTemplate" data-win-control="WinJS.Binding.Template">
        <div>

        </div>
    </div>

模版的声明就是这样子的其中在内部加一个div是因为WinJS.Binding.Template必须要有一个单个的根元素.

下面是完整定义item Template 显示的内容要与DataSource中的数据对应,在DataSource中.有三个部分要显示,分别是title text img,所以item中也需要有这三个,并且和DataSource中的每一个数据名相对应

    <div id="mediumListIconTextTemplate" data-win-control="WinJS.Binding.Template">
        <div style="width: 150px; height: 100px;">

            <!-- Displays the "picture" field. -->
            <img src="#" style="width: 60px; height: 60px;" 
                 data-win-bind="alt: title; src: picture" />
            <div>

                <!-- Displays the "title" field. -->
                <h4 data-win-bind="innerText: title"></h4>

                <!-- Displays the "text" field. --> 
                <h6 data-win-bind="innerText: text"></h6>
            </div>
        </div>
    </div>  
其中也定义了一些style,先放在这里,后面再使用class 统一放到css中

这样就定义好item模版了,下面要做的就是在ListView中使用这个模版

    <div id="basicListView" 
        data-win-control="WinJS.UI.ListView" 
        data-win-options="{ itemDataSource : DataExample.itemList.dataSource,
                            itemTemplate: select('#mediumListIconTextTemplate'),
                            layout: {type: WinJS.UI.GridLayout}}">
    </div>
现在运行 就可以看到图片还有文字了

下面进行一些样式的简单定制,首先是为要定制样式的标签加上class 修改后如下

<body>
    <div id="mediumListIconTextTemplate" data-win-control="WinJS.Binding.Template" style="display: none">
        <div class="mediumListIconTextItem">
            <img src="#" class="mediumListIconTextItem-Image"
                 data-win-bind="alt: title; src: picture"/>
            <div class="mediumListIconTextItem-Detail">
                <h4 data-win-bind="innerText: title"></h4>

                <h6 data-win-bind="innerText: text"></h6>
            </div>
        </div>
    </div>

    <div id="basicListView" 
        data-win-control="WinJS.UI.ListView" 
        data-win-options="{ itemDataSource : DataExample.itemList.dataSource,
                            itemTemplate: select('#mediumListIconTextTemplate'),
                            layout: {type: WinJS.UI.GridLayout}}">
    </div>
</body>

下面是css文件中对item和ListView的一些定制

#basicListView.win-listview {
    height: 650px;
    width: 600px;
    border: 2px solid gray;
}

    #basicListView.win-listview .win-container {
        margin: 10px;
    }

        #basicListView.win-listview .win-container:hover {
            background-color: red;
            border-color: red;
        }
.mediumListIconTextItem {
    width: 282px;
    height: 70px;
    padding: 5px;
    overflow: hidden;
    display: -ms-grid;
}

    .mediumListIconTextItem img.mediumListIconTextItem-Image {
        width: 60px;
        height: 60px;
        margin: 5px;
        -ms-grid-column: 1;
    }

    .mediumListIconTextItem .mediumListIconTextItem-Detail {
        margin: 5px;
        -ms-grid-column: 2;
    }

最后显示的效果就是这样的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值