IMO, метод ConvertBack
используется для преобразования визуального представления данных в конкретный тип данных.
Например: вы используете конвертер для преобразования логического true
в строку "TrueBoolean"
.Этот текст будет отображаться в вашем текстовом поле.Когда вы изменяете значение TextBox, метод ConvertBack
будет вызван, как только сработает привязка (по умолчанию OnFocusLost).Теперь ваш метод 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, если я не ошибаюсь.
Надеюсь, это немного понятно ...
ОБНОВЛЕНИЕ
О вашем вопросе в комментарии:
Перезаписать поведение привязки по умолчанию OnFocusLost
Вы должны изменить свою привязку следующим образом:
<TextBox Text="{Binding MyText, UpdateSourceTrigger=PropertyChanged}"/>
<!--syntax might differ, can't access VS at the moment.-->