2011-06-21 60 views
33

IValueConverter接口有什麼用法ConvertBack方法。在IValueConverter接口中使用ConvertBack方法有什麼用途?

什麼時候會打電話?

或者什麼爲了ConvertConvertBack方法的調用的。

我這裏問的問題,因爲:我已綁定代碼隱藏的一個屬性文本框的Text屬性,並使用convertor該屬性,

然後第一Convert方法調用,當我在TEXTBOX沒有改變TEXT發生,但只要我關閉表格ConvertBack方法調用。

這是什麼,沒有任何規則定義何時啓ConvertBack方法?

注意:您可能會發現這是可能的在本網站上的其他問題的重複...但沒有任何問題,當我寫我的問題時,我發現使用完整的建議列表。

回答

34

IMO時,ConvertBack方法用於數據的可視化表示轉換爲特定的數據類型。

例如:您使用轉換器將布爾型true轉換爲字符串"TrueBoolean"。該文本將顯示在您的文本框中。當您更改文本框的值時,只要綁定再次觸發(默認OnFocusLost),就會調用ConvertBack方法。現在你的ConvertBack方法會嘗試將新值轉換爲你想要的數據類型。所以你必須執行邏輯來將"FalseBoolean"轉換爲false

public class Converter : IValueConverter 
{ 
    object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return (bool) value ? "TrueBoolean" : "FalseBoolean"; 
    } 

    object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var s = (string) value; 
     if (s.Equals("TrueBoolean",StringComparison.CurrentCultureIgnoreCase)) 
      return true; 
     if (s.Equals("FalseBoolean", StringComparison.CurrentCultureIgnoreCase)) 
      return false; 
     throw new Exception(string.Format("Cannot convert, unknown value {0}", value)); 
    } 
} 

如果我沒有弄錯,這項技術在DataGrids中使用很多。

希望這是一個有點清楚......

UPDATE
關於你的評論質疑:
要覆蓋你必須改變你的綁定這樣的默認OnFocusLost綁定行爲:

<TextBox Text="{Binding MyText, UpdateSourceTrigger=PropertyChanged}"/> 
<!--syntax might differ, can't access VS at the moment.--> 
+0

@Roel,亞,但在我的情況下,當我關閉窗口時,ConvertBack被激發,這不是一個奇怪的? –

+1

不,我認爲這是正常的行爲:在窗口關閉之前,TextBox的OnFocusLost事件將被觸發,或者至少綁定會更新。 – RoelF

+0

@Rel,我需要做什麼,如果我需要調用ConvertBack方法,只要在TEXTBOX的TEXT中做出任何更改?我無法找到更新源觸發屬性,因爲@Dominik說... –

28

ConvertBack是當你有你的綁定mode=TwoWay

它將用戶輸入轉換回綁定的數據類型,並在TextBox(說)失去焦點時被調用。例如(如果沒有內置),如果您有一個代表價格的數字,則Convert方法將採用該值並將其格式化爲具有正確貨幣符號,小數分隔符等的字符串。

如果用戶鍵入一個新值 - 包括可能的貨幣符號,千位分隔符等,您可以使用ConvertBack方法解析字符串並提取數字值。

另一個例子可能是信用卡號碼輸入。用戶可以輸入數字作爲一串數字或由空格或破折號分隔的數字組。方法ConvertBack將採取所有這些可能的輸入並將它們轉換爲您需要的單一格式。

相關問題