在先前的文章 Windows Phone 開發 - 讀取【微軟最有價值專家 Microsoft MVP 台灣粉絲團】RSS 最後發生了讀取出來的資料有亂碼的狀況,透過 HttpUtility.HtmlDecode 方法 將已經為 HTTP 傳輸而進行 HTML 編碼的字串轉換為解碼的字串。我們是在 Model 將資料加入 Items 時對字串做處理,除了這樣的方式外,我們也可以透過 Converter 做綁定值的轉換。在 Windows Phone 開發中,我比較常使用 Converter 做資料轉換和偵錯(把綁定值透過 Converter 抓出來,觀察資料是否有問題),接著進行練習。
前言
在先前的文章 Windows Phone 開發 - 讀取【微軟最有價值專家 Microsoft MVP 台灣粉絲團】RSS 最後發生了讀取出來的資料有亂碼的狀況,透過 HttpUtility.HtmlDecode 方法 將已經為 HTTP 傳輸而進行 HTML 編碼的字串轉換為解碼的字串。
我們是在 Model 將資料加入 Items 時對字串做處理,除了這樣的方式外,我們也可以透過 Converter 做綁定值的轉換。
在 Windows Phone 開發中,我比較常使用 Converter 做資料轉換和偵錯(把綁定值透過 Converter 抓出來,觀察資料是否有問題),接著進行練習。
練習
請先下載先前文章 Windows Phone 開發 - 讀取【微軟最有價值專家 Microsoft MVP 台灣粉絲團】RSS 的範例 MvpRssPhoneApp.zip
開啟 MainViewModel.cs,將
Title = HttpUtility.HtmlDecode(item.Title.Text)
改回
Title = item.Title.Text
新增 Converter
先新增類別
名稱改為 TilteConverter.cs。
新增後的畫面。
Converter 需要繼承並且實作 IValueConverter 介面,此介面提供將自訂邏輯套用至繫結的方法。
在這邊順便介紹一些小技巧,首先我們先讓 TitleConverter 繼承 IValueConverter,由於尚未引入 namespace 因此錯誤。
我們可以透過解析的功能,在 IValueConverter 按滑鼠右鍵,選擇 [解析],選擇 namespace。
自動加入 namespace 到程式碼中,接著在 IValueConvert 上按滑鼠右鍵,選擇 [實作介面],選擇 [實作介面]。
可以看到包含兩個方法 Convert 和 ConvertBack。
修改 Convert 內容,將傳入的 value 透過 HttpUtility.HtmlDecode 轉換。
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return HttpUtility.HtmlDecode(value.ToString());
}
並將 class 改為 public。
將 Converter 加入應用程式資源 Application.Resources
開啟 App.xaml
將以下代碼加入 Application.Resources
<converter:TitleConverter xmlns:converter="clr-namespace:MvpRssPhoneApp" x:Key="TitleConverter" />
使用 Converter
開啟 MainPage.xaml 設計畫面,將顯示 Title 資訊的 TextBlock,Text 的部分,加上 Converter 進行綁定值轉換。
執行
我在 Converter 加入中斷點,當程式執行時,可以看到資料轉換的狀況。
執行結果。
範例下載