實作Silverlight 4 的RSS閱讀器
在黃忠成老師10/6發表的Expression Blend 4中的資料繫結一文中,小弟體驗到Silverlight 4 與Expression Blend 4強大的資料繫結功能,也受益匪淺。也開始探討其他的應用方式。因為在Silverlight中可繫結的資料也可以是XML檔案,甚至是位於其他網站上的XML的檔案、如RSS等,因此在Expression Blend 4中要製作一個Silverlight的RSS閱讀器非常的容易。
因為筆者隨機瀏覽到聯合新聞網的網站,因此就以新聞網的 (RSS資訊服務 –> 焦點要聞 –> 焦點) 的RSS連結作為本次的範例:
下面以英文版Expression Blend 4解說這個範例。
1.首先以Expression Blend 4開啟一個包含Web Site 的 Silverlight 4的專案,並在”Data”的頁籤選擇"Import Sample Data from XML.."。
2.在Import Sample Data from XML的視窗中將剛才複製的連結貼上。
3.接著會在Data的頁籤下的Project下面出現focusSampleDataSource的資料來源,
4.在畫面上拖曳一個DataGrid。
5.在這個focusSampleDataSource的資料來源中包含一個rss的XML資料基礎結構,其中在channel下的ItemCollection就是我們所需要的,請將他拖曳至DataGrid上,此動作Expression Blend 4會自動完成資料繫結的動作。
6.此時Expression Blend 應該會替DataGrid產生DataGrid.Columns 的XAML,如下紅色圈起來處。
而且在Expression Blend 4的設計畫面也可以看見預覽的資料,不過因為欄位的順序不是我們要的,因此筆者將title移至為第一個欄位,並且將欄位名稱 title改為"標題"、link改為"連結"、pubDate改為"發布日期"。此時設計模式畫面應該會是如下的畫面:
現在基本的畫面雛形已經出來了,可以開始寫程式了。在channel下的itemCollection中有這個新聞標題所在的URL,這是RSS 1.0與2.0提供基本欄位 (對RSS有興趣的讀者可參考相關資料),因此我們就要利用這個URL連結來製造個新視窗讓使用者瀏覽詳細的新聞內容。程式碼非常的容易,利用DataGrid的SelectionChanged事件,以SelectionChangedEventArgs的AddedItems屬性可以抓到當時點選的IList [] 的陣列物件,要注意的是,若您沒修改,預設的focusRSSDataSource會被定義在Expression.Blend.SampleData 這個命名空間中,當您拖曳itemCollection到設計畫面時,Expression Blend 4其實已經幫您建立了 SampleData的資料夾,同時也幫您建立了資源檔 "focusRSSDataSource.xaml" ,DataGrid才能夠在設計畫面下預覽RSS相關資料,
還有一個 "focusRSSDataSource.xaml.cs",這是自動產生的程式碼,待會程式會使用的Expression.Blend.SampleData.focusRSSDataSource.item 物件便是定義在此。下面是筆者在DataGrid_SelectionChanged事件中撰寫的程式碼:
程式完成後,接著我們可以來執行看看,只要以滑鼠點選任一筆新聞內容即會開啟視窗。執行畫面如下:
OK!一個簡單的應用,也許各位又有別的啟發,我們下次見。
因為筆者隨機瀏覽到聯合新聞網的網站,因此就以新聞網的 (RSS資訊服務 –> 焦點要聞 –> 焦點) 的RSS連結作為本次的範例:
下面以英文版Expression Blend 4解說這個範例。
1.首先以Expression Blend 4開啟一個包含Web Site 的 Silverlight 4的專案,並在”Data”的頁籤選擇"Import Sample Data from XML.."。
2.在Import Sample Data from XML的視窗中將剛才複製的連結貼上。
3.接著會在Data的頁籤下的Project下面出現focusSampleDataSource的資料來源,
4.在畫面上拖曳一個DataGrid。
5.在這個focusSampleDataSource的資料來源中包含一個rss的XML資料基礎結構,其中在channel下的ItemCollection就是我們所需要的,請將他拖曳至DataGrid上,此動作Expression Blend 4會自動完成資料繫結的動作。
6.此時Expression Blend 應該會替DataGrid產生DataGrid.Columns 的XAML,如下紅色圈起來處。
而且在Expression Blend 4的設計畫面也可以看見預覽的資料,不過因為欄位的順序不是我們要的,因此筆者將title移至為第一個欄位,並且將欄位名稱 title改為"標題"、link改為"連結"、pubDate改為"發布日期"。此時設計模式畫面應該會是如下的畫面:
現在基本的畫面雛形已經出來了,可以開始寫程式了。在channel下的itemCollection中有這個新聞標題所在的URL,這是RSS 1.0與2.0提供基本欄位 (對RSS有興趣的讀者可參考相關資料),因此我們就要利用這個URL連結來製造個新視窗讓使用者瀏覽詳細的新聞內容。程式碼非常的容易,利用DataGrid的SelectionChanged事件,以SelectionChangedEventArgs的AddedItems屬性可以抓到當時點選的IList [] 的陣列物件,要注意的是,若您沒修改,預設的focusRSSDataSource會被定義在Expression.Blend.SampleData 這個命名空間中,當您拖曳itemCollection到設計畫面時,Expression Blend 4其實已經幫您建立了 SampleData的資料夾,同時也幫您建立了資源檔 "focusRSSDataSource.xaml" ,DataGrid才能夠在設計畫面下預覽RSS相關資料,
還有一個 "focusRSSDataSource.xaml.cs",這是自動產生的程式碼,待會程式會使用的Expression.Blend.SampleData.focusRSSDataSource.item 物件便是定義在此。下面是筆者在DataGrid_SelectionChanged事件中撰寫的程式碼:
private void DataGrid_SelectionChanged(object sender,SelectionChangedEventArgs e)
{
IList list = e.AddedItems;
Expression.Blend.SampleData.focusRSSDataSource.item _item = (Expression.Blend.SampleData.focusRSSDataSource.item)list[0];
System.Windows.Browser.HtmlPage.PopupWindow(
new Uri(_item.link),
"_blank",
new System.Windows.Browser.HtmlPopupWindowOptions()
{
Height=600,
Width=800,
Menubar=false,
Toolbar=false,
Resizeable=true,
Scrollbars=true
});
}
程式完成後,接著我們可以來執行看看,只要以滑鼠點選任一筆新聞內容即會開啟視窗。執行畫面如下:
OK!一個簡單的應用,也許各位又有別的啟發,我們下次見。
留言
張貼留言