Xamarin 形成值转换器导致无限循环

2024-01-12

我试图获得一个使用转换器的简单双向绑定示例,但是一旦条目中的值发生变化,例如如果您输入 1,它就会陷入无限循环,它会到达 ConvertBack 方法的末尾并设置值正确。然后,它再次调用 ConvertBack 方法,除了这次的值是 11,下一次它将是 111,并继续执行,直到模拟器崩溃。

即使当我停止调试时,模拟器也会不断地将数字输入到新的搜索窗口中。

转换器:

public class StringToNullableInt : IValueConverter
{
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo language)
    {
        if (string.IsNullOrEmpty(value?.ToString()))
        {
            return null;
        }
        else
        {
            int tmp = 0;
            if (Int32.TryParse(value.ToString(), out tmp))
            {
                return tmp;
            }
            else
            {
                return null;
            }
        }
    }

    public object Convert(object value, Type targetType, object parameter, CultureInfo language)
    {
        return value;
        //throw new NotImplementedException();
    }
}

要绑定的字段

public int? Test
    {
        get
        {
            return _test;
        }
        set
        {
            if (value != _test)
            {
                _test = value;
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs("Test"));
            }
        }
    }

束缚场

<Entry Text="{Binding Test, Mode=TwoWay, Converter={StaticResource cnvStringToNullableInt} }" />

将 Int 绑定到 Entry 并不是一个好的解决方案(对我来说)。

我建议有一个 TestString 属性

string _testString {get;set;}
public string TestString {
    get{
       return _testString;

    }
    set{
        try {
            _testString = value;
            _test = int.Parse(_testString);
        }
        catch {    _test = null;}
    }
}

现在您可以尝试使用 TestString 进行绑定,而不使用 IValueConverter

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xamarin 形成值转换器导致无限循环 的相关文章

随机推荐