【问题标题】:UWP - Textbox Binding to nullabel int not workingUWP - 文本框绑定到可为空的 int 不起作用
【发布时间】:2016-04-20 23:56:35
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    请尝试在 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;
            }
        }
    

    【讨论】:

    • 复制粘贴失败的最佳示例。我应该更好地看看我从另一个示例复制的转换器,以及当我需要一个 int 时它返回一个字符串的事实。非常感谢!
    猜你喜欢
    • 2017-02-15
    • 2019-01-28
    • 2016-11-18
    • 2015-08-12
    • 2017-01-08
    • 2018-03-15
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多