UWP - привязка текстового поля к nullabel int не работает

В моем универсальном приложении, если я ввожу значение в текстовое поле, введенное значение не передается в объект поддержки. это происходит только со значениями, допускающими значение NULL, как только я делаю переменную не допускающей значения NULL, она работает должным образом.

Что мне показалось странным, так это то, что если я установил TargetNullValue = '' в свою привязку и очистил текстовое поле, то вызывается объект поддержки и значение устанавливается равным null, как ожидалось, но если я затем ввожу новое значение в текстовое поле, это значение не будет перенесен в объект поддержки.

Моя проблема очень похожа на эту, я думаю: UWP - привязать TextBox.Text к Nullable ‹Int›

Единственная разница в том, что я не получаю никаких сообщений об ошибках, просто ничего не происходит. Я даже пробовал обходной путь конвертера. преобразователь вызывается, но значение, возвращаемое преобразователем, не устанавливается в объект.

Я нашел много сообщений, подобных тому, что я связал выше, но во всех случаях возвращались сообщения об ошибках. опять же, в моем случае просто ничего не происходит, как будто нет привязки.

Это мой код:

<Grid.Resources>
    <utils:NullableValueConverter x:Key="NullableIntConverter" />
</Grid.Resources>
<TextBox Text="{Binding Level, Mode=TwoWay, Converter={StaticResource NullableIntConverter}, TargetNullValue=''}" PlaceholderText="Level"/>

Объект поддержки:

public class Unit
{
    public int? Level { get; set; }
}

Конвертер:

public class NullableValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return string.IsNullOrEmpty(value.ToString()) ? null : value;
    }
}

person gofrm    schedule 20.04.2016    source источник


Ответы (1)


Попробуйте вернуть значение int в ConvertBack (), как показано ниже.

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        int data;

        if (string.IsNullOrEmpty((string)value) || !int.TryParse((string)value, out data))
        {
            return null;
        }
        else
        {
            return data;
        }
    }
person Jean-Sébastien Dupuy    schedule 20.04.2016
comment
Лучший пример, когда копирование и прошлое ужасно провалились. Мне следовало бы лучше взглянуть на преобразователь, который я скопировал из другого примера, и на тот факт, что он возвращает строку, когда мне нужно int. Большое спасибо! - person gofrm; 21.04.2016