填充我的博客側邊欄——Word 2007高級應用
假設"我的博客"側邊欄的相關文件安置在My Blogs文件夾里,該文件夾的結構如下圖所示:

圖 1
雖然我們可以通過枚舉My Blogs的子文件夾來填充cbxBlogs控件,然而我希望設計一個類來表示博客并且實現一定的數據綁定。回顧上一篇文章“創建我的博客側邊欄 ——Word 2007高級應用(二)”,"我的博客"側邊欄應該具備如下特性:



它會在啟動時讀取My Blogs文件夾里的相關信息,并且填充 cbxBlogs控件;
當我們在博客列表中選擇某個博客時,它會通過RSS獲取該博客最近發布的帖子,并且填充lbxRecentPosts控件;
當我們在博客列表中選擇某個博客時,它會讀取該博客帖子草稿文件夾里的數據,并且填充lbxDrafts控件;
當我們在博客列表中選擇某個博客時,按下View Blog按鈕將會在Internet Explorer中打開該博客的主頁;
當我們在最近帖子列表中選擇某個帖子時,按下View Post按鈕將會在Internet Explorer中打開該帖子的網頁;
當我們在草稿列表中選擇某個草稿時,按下Open Draft按鈕將會在新的Word 2007中打開該草稿。
明確這些需求后,我們就可以著手寫代碼了:
對于Code #01,以下幾點是需要說明的:
Post、Draft和Blog類都重寫了ToString()方法,這是因為ComboBox和ListBox等控件會調用該方法并把返回的字符串用 作條目的顯示,重寫該方法是為了讓條目得到正確的顯示。當然,如果你結合DataSource和DisplayMember來使用,也可以不重寫 ToString()方法。
Blog.GetRecentPosts()方法里使用Argotic Syndication Framework來進行RSS信息處理,所以你需要下載并安裝它,然后在項目中引用相關的類庫和Argotic.Core.Rss命名空間。
Blog.GetRecentPosts()方法里對RSS地址進行了假設,這個假設適用于博客園以及旗下其它網站,當然,你可以想出很多方法讓它具備普遍適用性。
Blog.GetRecentPosts()方法里使用NetworkInterface. GetIsNetworkAvailable()方法判斷當前網絡是否連通,如果連通則獲取數據,否則返回空數組。
Blog.GetDrafts()方法沒有進行任何篩選,這里假設文件夾里面只包含.docx和/或.doc文件。由于這些文件將會用Word 2007打開,如果你可能往文件夾里放置Word 2007不能讀取的文件,那么你最好為LINQ查詢語句加入where來進行必要的過濾。
在Blog.GetDrafts()方法里,我還假設My Blogs文件夾是放在"我的文檔"里的,并且博客所在的文件夾名字和博客的名字一樣,當然,這樣我們就不能在博客的名字里面包含非法的路徑字符了。
我們可以讓文件夾的名字和博客的名字相同,但卻無法在這里包含博客的URL信息,而這又是很多操作的前提,于是我在My Blogs文件夾里放置一個Blogs.xml文件,里面包含了如下內容:
新聞熱點
疑難解答