我试图让一个简单的双向绑定示例使用转换器但是只要条目中的值发生更改,例如如果输入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} }" />
答案 0 :(得分:1)
将Int绑定到条目不是一个好的解决方案(对我而言)。
我建议有一个TestString属性
string _testString {get;set;}
public string TestString {
get{
return _testString;
}
set{
try {
_testString = value;
_test = int.Parse(_testString);
}
catch { _test = null;}
}
}
现在您可以尝试使用TestString进行绑定,而不使用IValueConverter