2017-04-03 6 views
1

Ich versuche, ein einfaches Zwei-Wege-Bindungsbeispiel zu erhalten, das mit einem Konverter arbeitet, aber sobald sich der Wert im Eintrag ändert, wenn Sie beispielsweise 1 eingeben, bleibt er in einer Endlosschleife stecken Ruft das Ende der ConvertBack-Methode auf und legt den Wert korrekt fest. Es trifft dann die ConvertBack-Methode erneut außer diesmal mit dem Wert 11, das nächste Mal wird es 111 sein und es geht weiter, bis es den Emulator abstürzt.Xamarin bildet Wertkonverter, der Endlosschleife verursacht

Auch wenn ich mit dem Debuggen aufhöre, gibt der Emulator die Nummer einfach unendlich in ein neues Suchfenster ein.

Converter:

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(); 
    } 
} 

Feld

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

gebundenes Feld

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

Antwort

1

Bind ein Int zu einem Eintrag zu binden, ist keine gute Lösung (für mich).

Ich schlage vor, eine Teststring Eigenschaft

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

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

jetzt haben, können Sie versuchen, mit Teststring zu binden, ohne IValueConverter

+0

I int als Beispiel verwendet, aber wenn ich es in Strings ändern bekomme ich genau die gleiche Schleife Problem. Jedes Mal, wenn ich eine Zwei-Wege-Bindung mit einem Konverter verwende, wie ich es in dem Beispiel getan habe, scheint es passiert zu sein – wolfman1001

+0

Sie sollten Ihren neuen Code und Ihre neue XAML veröffentlichen –