Windows Phone可以为空的int绑定对TextBox不起作用

时间:2014-07-30 14:53:45

标签: c# wpf xaml windows-phone windows-phone-8.1

如果value为Nullable,则绑定不起作用,但如果不是,则绑定就像魅力一样。

XAML

   <TextBox 
       Text="{Binding Age, Mode=TwoWay, TargetNullValue=''}" 
       InputScope="Number" 
       MaxLength="2"/>

怎么了?

2 个答案:

答案 0 :(得分:1)

Mikko把我推到了一个解决方案。因此,必须以目标类型从转换器返回值。 "23"不是有效的int?,也不会自动转换。你应该自己做。

在我的特殊情况下,这个转换器帮助了我:

转换器

public class NullableIntToString : 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)
    {
        if (value == null || string.IsNullOrWhiteSpace(value.ToString())) return null;
        int result;
        if (int.TryParse(value.ToString(), out result)) return result;

        return null;
    }
}

XAML

   <...>

   <Page.Resources>
      <converters:NullableIntToString x:Key="NullableValue"/>
   </Page.Resources>

   <...>

   <TextBox 
      Text="{
         Binding Age, 
         Mode=TwoWay, 
         Converter={StaticResource NullableValue}
      }" 
      InputScope="Number" 
      MaxLength="2"/>

   <...>

答案 1 :(得分:0)

此行为的good reference

快速解决方案不是创建转换器,而是使用TargetNullValue和StringFormat&#39; D&#39;

<TextBox Text="{Binding Path=Age,
               TargetNullValue={x:Static sys:String.Empty},
               StringFormat=\{0:D\}}"
         InputScope="Number" />