UWP - 文本框绑定到nullabel int无法正常工作

时间:2016-04-20 00:58:20

标签: c# windows-10-universal uwp-xaml

在我的通用应用程序中,如果我在文本框中输入值,则输入的值不会传输到后备对象中。这只发生在可以为空的值上,只要我使变量不可为空它就会按预期工作。

我发现奇怪的是,如果我设置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;
    }
}

1 个答案:

答案 0 :(得分:2)

请尝试在ConvertBack()中返回 int 值,如下所示。

    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;
        }
    }