Подтвердить что ты не робот

Каково использование метода ConvertBack в интерфейсе IValueConverter?

Что такое метод ConvertBack в интерфейсе IValueConverter.

Когда он вызывается?

Или что такое порядок вызова метода Convert и ConvertBack.

Я задаю вопрос здесь, потому что: Я связал одно свойство codebehind с TEXTBOXs TEXT Property и использовал convertor для этого свойства,

затем сначала Convert Метод invoke и когда я изменяю TEXT в TEXTBOX, ничего не происходит, но как только я закрою метод формы ConvertBack.

что это такое, нет правил, которые определяют , когда нужно запустить ConvertBack метод?

ПРИМЕЧАНИЕ: вы можете найти, что это возможный дубликат другого вопроса на этом сайте... но не любой вопрос, который я нашел, использовал полный список предложений, когда я пишу свой вопрос.

4b9b3361

Ответ 1

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, если я не ошибаюсь.

Надеюсь, это немного ясно...

UPDATE
О вас вопрос в комментарии:
Чтобы переписать поведение привязки по умолчанию OnFocusLost, вам необходимо изменить привязку следующим образом:

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

Ответ 2

ConvertBack - это когда у вас есть mode=TwoWay на вашей привязке.

Он преобразует вход пользователя обратно в тип данных, к которому вы привязываетесь, и вызывается, когда TextBox (скажем) теряет фокус.

Например (если это не было встроено), если у вас есть число, представляющее цену, метод Convert примет значение и отформатирует его в строку с правильным символом валюты, разделителем десятичной дроби и т.д.

Если пользователь вводит новое значение - включая возможный символ валюты, разделитель тысяч и т.д., вы должны использовать метод ConvertBack для синтаксического анализа строки и извлечения числового значения.

Другим примером может служить ввод номера кредитной карты. Пользователь может ввести номер в виде одной строки цифр или групп цифр, разделенных пробелами или тире. Метод ConvertBack будет принимать все эти возможные входы и преобразовывать их в требуемый единый формат.

Ответ 3

проверьте свойство UpdateSourceTrigger на вашем Binding. http://msdn.microsoft.com/library/system.windows.data.binding.updatesourcetrigger.aspx

Текстовое поле по умолчанию обновит источник, если он потеряет фокус, используя UpdateSourceTrigger, вы можете установить это поведение для немедленного обновления источника, если изменяется содержимое текстового поля.

НТН Dominik