[Windows Phone] Converter 綁定值轉換

  • 1753
  • 0
  • 2013-12-06

在先前的文章 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

image

 

新增 Converter

先新增類別

image

 

名稱改為 TilteConverter.cs。

SNAGHTMLb2f28

 

新增後的畫面。

image

 

Converter 需要繼承並且實作 IValueConverter 介面,此介面提供將自訂邏輯套用至繫結的方法。

在這邊順便介紹一些小技巧,首先我們先讓 TitleConverter 繼承 IValueConverter,由於尚未引入 namespace 因此錯誤。

image

 

我們可以透過解析的功能,在 IValueConverter 按滑鼠右鍵,選擇 [解析],選擇 namespace。

image

 

自動加入 namespace 到程式碼中,接著在 IValueConvert 上按滑鼠右鍵,選擇 [實作介面],選擇 [實作介面]。

image

 

可以看到包含兩個方法 ConvertConvertBack

image

 

修改 Convert 內容,將傳入的 value 透過 HttpUtility.HtmlDecode 轉換。


        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return HttpUtility.HtmlDecode(value.ToString());
        }

並將 class 改為 public。

image

 

將 Converter 加入應用程式資源 Application.Resources

開啟 App.xaml

image

 

將以下代碼加入 Application.Resources


        <converter:TitleConverter xmlns:converter="clr-namespace:MvpRssPhoneApp" x:Key="TitleConverter" />

 

image

 

使用 Converter

開啟 MainPage.xaml 設計畫面,將顯示 Title 資訊的 TextBlock,Text 的部分,加上 Converter 進行綁定值轉換。

image

 

執行

我在 Converter 加入中斷點,當程式執行時,可以看到資料轉換的狀況。

image

 

執行結果。

SNAGHTML281da7

 

範例下載

MvpRssPhoneApp.zip

 

其他相關資訊

Collection of Value converters for Windows Phone apps