2016-04-20 3 views
0

В моем универсальном приложении, если я ввожу значение в текстовое поле, введенное значение не переносится в объект подстановки. что происходит только с значениями с нулевым значением, как только я делаю переменную недействительной, она работает как ожидалось.UWP - Текстовое поле Связывание с nullabel int не работает

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

Моя проблема очень похожа на этот, я думаю: UWP - Bind TextBox.Text to 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; 
    } 
} 

ответ

2

Пожалуйста, попробуйте вернуть значение 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; 
     } 
    } 
+0

Лучший пример, когда копирование и прошлое прошло ужасно. Я должен был лучше посмотреть на конвертер, который я скопировал из другого примера, и тот факт, что он возвращает строку, когда мне нужен int. Большое спасибо! – gofrm