首页 > 解决方案 > 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.formsbindingconverters

解决方案


这样,我希望它会无休止地继续下去。

  1. 文本不会按预期显示,会导致死循环,此时应用程序挂起。

  2. Xamarin Team 似乎已经解决了如果我们在创建绑定时在 Entry 上使用转换器会发生无限循环的问题。

检查以下线程,该问题之前确实存在。

https://forums.xamarin.com/discussion/92310/two-way-binding-with-a-converter-causing-an-infinite-loop

入口值转换器一次又一次地挂起转换和转换回来

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


推荐阅读