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.-->
@Roel,亞,但在我的情況下,當我關閉窗口時,ConvertBack被激發,這不是一個奇怪的? –
不,我認爲這是正常的行爲:在窗口關閉之前,TextBox的OnFocusLost事件將被觸發,或者至少綁定會更新。 – RoelF
@Rel,我需要做什麼,如果我需要調用ConvertBack方法,只要在TEXTBOX的TEXT中做出任何更改?我無法找到更新源觸發屬性,因爲@Dominik說... –