Xamarin.Forms: Почему процесс IValueConverter не играет в пинг-понг навсегда? - PullRequest
0 голосов
/ 05 августа 2020

В 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 , поэтому теперь ConvertBack () будет вызываться снова, поэтому строка AGPSPGP будет отправлена ​​в источник

, но теперь это приводит к изменению в Source ...

... и таким образом я ожидаю, что go будет бесконечно.

Конечно, я ошибаюсь. Подскажите, пожалуйста, где?

1 Ответ

0 голосов
/ 06 августа 2020

таким образом, я ожидаю, что это будет go бесконечно.

  1. Текст будет отображаться не так, как ожидалось, это приведет к бесконечному l oop, приложение в это время зависает.

  2. Кажется, что Xamarin Team устранила проблему, связанную с бесконечным l oop, которое могло бы произойти, если мы используем преобразователь для Entry при создании привязки.

Проверьте следующие темы, проблема существовала раньше.

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

Преобразователь значения ввода зависает при преобразовании и преобразование снова и снова

Xamarin формирует преобразователь значений, вызывая бесконечное l oop

...