xamarin.forms - Xamarin.Forms:为什么 IValueConverter 的过程不会永远打乒乓球?
问题描述
在 Xamarin.Forms 中,我实现了接口 IValueConverter。
public class NiceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string valueAsString = value as string;
return valueAsString + "SP";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
string valueAsString = value as string;
return valueAsString + "GP";
}
}
在 XML 部分中,我绑定了一个 Entry 文本,并指定我使用该转换器:
<ContentPage.Resources>
<convertorsNS:NiceConverter x:Key="myAddDollarSignConverter"/>
</ContentPage.Resources>
<StackLayout>
<Entry x:Name="myTextEntry" Text="{Binding NiceString ,
Converter = {StaticResource NiceConverter }, Mode=TwoWay}"/>
我希望每当我在条目中键入一个字符时,比如说“A”,ConvertBack() 将被调用,因此字符串“AGP”将被发送到源绑定属性,
但是现在这会导致Source 绑定属性发生变化,因此将调用 Convert (),因此会将字符串“AGPSP”发送到 Target,
但是现在这会导致Target发生变化,所以现在将再次调用 ConvertBack() ,因此字符串 AGPSPGP 将被发送到源
但现在这会导致源的变化......
...而且我希望它会这样无休止地继续下去。
我当然错了。你能告诉我在哪里吗?
解决方案
这样,我希望它会无休止地继续下去。
文本不会按预期显示,会导致死循环,此时应用程序挂起。
Xamarin Team 似乎已经解决了如果我们在创建绑定时在 Entry 上使用转换器会发生无限循环的问题。
检查以下线程,该问题之前确实存在。
推荐阅读
- java - FXMLLoader.getController() 返回 null
- python - 如何在 python 中创建内联 for 循环来对数字列表求和?
- java - 当 key 不同时将相似类型的数据映射到 bean
- python - 如何计算用户输入的平均值?-Python-
- google-cloud-pubsub - 多个应用实例使用来自 Pub/Sub 主题的所有消息
- macos - 使用 nasm 在 MacOX 上编译 asm 文件
- python - 如何在纯 python 中的 windows 上获取父 shell 的路径?
- reactjs - 反应原生 EXPO Javascript 混淆
- javascript - 控制台日志一直给我一个错误,我该如何解决这个问题?
- c# - 如何在 Azure 上存储 .Net 核心 Web 应用程序的文件上传