<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    狂淘

    www.kuangtao.net

       :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      6 隨筆 :: 185 文章 :: 68 評論 :: 0 Trackbacks

    這是8個系列教程的第三部分,這系列示范如何使用Silverlight 2的Beta1版本建造一個簡單的Digg客戶端應用。這些教程旨在按順序閱讀,幫著解釋Silverlight的一些核心編程概念。

    使用Networking取回Digg故事

    Silverlight 2 有內(nèi)置的networking API,允許Silverlight客戶端調用遠程的REST, SOAP/WS*, RSS, JSON和XML HTTP服務。Silverlight 2還包含了內(nèi)置的socket API (System.Net.Sockets),允許Silverlight客戶端通過非HTTP協(xié)議來通信(對聊天服務等這樣的場景非常理想)。

    跨域網(wǎng)絡訪問

    Silverlight 2應用在做網(wǎng)絡調用時,始終可以回調到它們的“原始(origin)”服務器(意味著它們可以調用下載的應用來自的同域的URL)。Silverlight 2應用還可以做跨域網(wǎng)絡調用(意味著它們可以調用與下載的應用來自的不同的域上的URL),只要遠程的web服務器擁有一個XML策略文件,表明客戶端是允許做這些跨域調用的。

    Silverlight 2 定義了一個XML策略文件格式,允許服務器管理員精確地控制一個客戶端應該有些什么訪問權。Silverlight 2 也遵守默認的Flash跨域策略文件格式-這意味著你可以使用Silverlight 2 來調用web上已經(jīng)允許Flash客戶端跨域訪問的任何現(xiàn)有的遠程REST, SOAP/WS*, RSS, JSON 或 XML 端點(end-point )。

    Digg.com有一套非常酷的通過HTTP通信的Digg APIs。因為他們有一個Flash跨域策略文件在他們的服務器上,我們可以直接從我們的Silverlight Digg 客戶端應用中調用它們(而不要求我們通過我們的web服務器去訪問他們的API)。

    Digg.com 主題 Feed API

    我們要允許終端用戶使用我們的應用輸入一個搜索主題(譬如,“Programming”),然后點擊“搜索”按鈕,從Digg.com取回符合條件的前N條故事:

    我們可以使用Digg.com List Stories REST API feed API 來實現(xiàn)。它在URL中接受一個主題參數(shù)(譬如,GET /stories/topic/programming),然后返回一個匹配那個主題的XML格式的Digg故事集。點擊這里看一下這個XML格式的例子。

    使用 System.Net.WebClient 來異步調用Digg REST Feed

    在上面的搜索按鈕被點擊之后,我們將處理它的Click事件,從WaterMarkTextBox控件中取回要搜索的主題字符串,然后啟動一個發(fā)向Digg的網(wǎng)絡調用,為那個主題取回相應的XML列表。

    Silverlight 在 System.Net 命名空間下包含了WebClient輔助類(該類也在完整的.NET 框架下)。我們可以使用這個類從URL異步下載內(nèi)容。異步下載Digg故事的好處是,在等待遠程服務器的回復時,我們的UI不用阻塞或變得沒有反應(允許我們擁有一個非常流暢的用戶體驗)。

    通過WebClient類執(zhí)行異步下載,我們要做的是注冊一個DownloadStringCompleted事件處理方法(它將在請求的內(nèi)容被下載之后被調用),然后調用WebClient.DownloadStringAsync(url) 輔助方法來開始下載:

    使用上面的代碼,我們現(xiàn)在就可以異步取回一個XML數(shù)據(jù)的字符串,內(nèi)含有關用戶想要的任何主題的Digg故事。

    使用LINQ to XML把XML格式的Digg故事分析成Story類對象

    至此,我們可以取回Digg故事數(shù)據(jù)的XML片段了,下一步將是對其進行分析(parse),并將它轉換成我們可以操作和綁定到控件上的DiggStory對象。

    我們將首先定義一個DiggStory類,該類擁有可以映射到來自Digg的XML內(nèi)容上的屬性(我們將利用C#新的 的特性來實現(xiàn)):

    然后我們就可以使用LINQ (是內(nèi)置于 Silverlight 2中的)和 LINQ to XML (是包含在我們的Silverlight 應用中的一個額外的庫 )來輕松地分析和過濾從Digg返回的XML文檔,使用下面的代碼把它翻譯成一個DiggStory對象序列:

    注意上面,我們現(xiàn)在有了來自XML的我們可以操作的強類型的DiggStory對象。

    在DataGrid控件中顯示Digg故事

    我們將使用新的 Silverlight DataGrid 控件來在我們的應用中顯示Digg故事。要使用它,我們要引用Silverlight Data 控件程序集,然后把前面網(wǎng)頁上的“Todo”文字替換成一個DataGrid控件聲明:

    DataGrid允許你明確地配置列的聲明和顯示類型(為取得最大的控制),或者,你也可以設置它的AutoGenerateColumns屬性成true,讓DataGrid對數(shù)據(jù)源使用反射,基于你的對象的定義,為你創(chuàng)建默認的列。

    然后我們就可以更新我們的后臺代碼類,用編程的方法將DataGrid的ItemSource屬性綁定到在點擊搜尋按鈕時從Digg取回的故事序列:

    現(xiàn)在,運行我們的Silverlight應用,做一個搜索的話,我們將看到從Digg取回的實時主題故事數(shù)據(jù)的列表:

    Silverlight的Datagrid支持你預期客戶端網(wǎng)格控件應該擁有的所有的標準功能:雙向原地編輯,選擇,卷動,改變表列大小等等。它還支持自動流動的布局,意味著它可以動態(tài)地擴展或收縮來充滿包含它的內(nèi)容容器。DataGrid還擁有一個豐富的模板模型,允許你對顯示和表列數(shù)據(jù)的編輯進行定制。我在將來會撰寫更多的貼子,討論如何使用DataGrid。

    以下的步驟

    現(xiàn)在我們可以從Digg.com 取回Digg故事數(shù)據(jù),并在我們的應用中將故事數(shù)據(jù)顯示出來了。

    下一步將是回到我們的Page.xaml 標識,去掉我們目前正在使用的行內(nèi)的樣式聲明。

    主站蜘蛛池模板: 最近中文字幕大全中文字幕免费| 大片免费观看92在线视频线视频| 午夜免费啪视频在线观看| 亚洲日本一区二区三区在线不卡| 三级片免费观看久久| 亚洲天堂中文字幕在线| 一级免费黄色大片| 亚洲午夜久久久影院伊人| 中文日本免费高清| 亚洲AV无码一区东京热久久 | 亚洲国产精品成人久久蜜臀| 久久精品国产亚洲AV天海翼| 日韩免费毛片视频| 国产亚洲精品仙踪林在线播放| www.91亚洲| a毛看片免费观看视频| 亚洲邪恶天堂影院在线观看| 3344永久在线观看视频免费首页| 亚洲国产一区在线观看| 在线免费观看污网站| 国产亚洲综合视频| 亚洲熟妇无码八AV在线播放| 久久大香香蕉国产免费网站| 亚洲小视频在线播放| 在线A级毛片无码免费真人| 男男gay做爽爽免费视频| 亚洲码国产精品高潮在线| 99国产精品视频免费观看| 亚洲乱码无限2021芒果| 国产自产拍精品视频免费看| 精品一区二区三区高清免费观看 | 亚洲精品自拍视频| 成年私人影院免费视频网站| 免费A级毛片无码专区| 亚洲一区二区三区免费观看| 亚洲av无码天堂一区二区三区| 两个人看的www免费视频中文| 亚洲乱码一区av春药高潮| 亚洲精品无码成人片在线观看| 91精品免费不卡在线观看| 日韩国产精品亚洲а∨天堂免|