2017-02-22 3 views
6

Ich habe ein gemeinsames Xamarin.Forms-Projekt, und das Problem existiert nur auf Android. Mein Problem ist, dass ich eine Listenansicht habe, und wenn ich auf eine Schaltfläche in meiner benutzerdefinierten Zelle klicke, ändert sich die Farbe (von blau nach grün). Dann klicke ich auf eine andere Schaltfläche, die eine andere Seite öffnet, und wenn ich diese Seite schließe, wird das Objekt aus der Listenansicht entfernt. Aber jetzt hat der Gegenstand unter dem entfernten einen grünen Knopf anstelle eines blauen. Hier ein Beispiel:Xamarin Formulare CustomCell in Listview Button Hintergrundbindung funktioniert nicht?

  1. Erstes Bild - Anzeigen der Listview mit einer customcell Insider-Informationen und 2-Tasten enthalten bemerken, dass sie blau sind.

enter image description here

  1. Zweites Bild - Zeige, dass ich die erste Taste gedrückt haben, und es ist nun grün geworden.

enter image description here

  1. Thrid Bild - Zeigt die Seite, die gedrückt wird, wenn ich die zweite Taste drücken.

enter image description here

  1. Viertes Bild - Jetzt habe ich die „Bekræft“ -Taste auf dem Bild vor geklickt, und die Nachricht wurde an der Listview-Seite geschickt die entfernen RouteElement von der Liste (und so tut es). Aber jetzt ist der erste Knopf grün, obwohl er nicht gedrückt wurde.

enter image description here

Das RouteElement Modell.

public class RouteElement : INotifyPropertyChanged 
{ 
    string arrivalBtnColor; 
    public event PropertyChangedEventHandler PropertyChanged; 

    public DateTime ArrivalTime { get; set; } 
    public DateTime DepartureTime { get; set; } 
    public bool ReadyForService { get; set; } 
    public bool DeliveredToService { get; set; } 
    public string ArrivalBtnBColor 
    { 
     get { return arrivalBtnColor; } 
     set 
     { 
      if (arrivalBtnColor != value) 
      { 
       arrivalBtnColor = value; 
       OnPropertyChanged("ArrivalBtnBColor"); 
      } 
     } 
    } 
    public RouteElement() 
    { 
     this.ArrivalBtnBColor = "Default"; 
    } 
    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, 
       new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

Die CustomCell

Button ArrivalBtn = new Button 
    { 
    Text = "Ankomst", 
    FontSize = 24, 
    BorderRadius = 10, 
    HeightRequest = 75, 
    TextColor = Color.FromHex("#FFFFFF") 
    }; 
ArrivalBtn.SetBinding(Button.BackgroundColorProperty, "ArrivalBtnBColor",BindingMode.Default, new StringToColorConverter(), null); 

Label PostalNoLbl = new Label() 
      { 
       TextColor = Color.Black, 
       HorizontalTextAlignment = TextAlignment.Center, 
       VerticalOptions = LayoutOptions.Start, 
       FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Label)) 
      }; 
      PostalNoLbl.SetBinding(Label.TextProperty, "Postcode"); 
      PostalNoLbl.SetBinding(Label.IsVisibleProperty, "Postcode", BindingMode.Default,new StringToBoolConverter(),null); 

Dann rufe ich diese MessagingCenter Funktion von einer anderen Seite in der Navigation zu entfernen.

MessagingCenter.Subscribe<RouteElement>(this, "Refresh",(sender) => 
{ 
    RouteElement r = (RouteElement)sender; 
    rOC.Remove(r); 
} 

Und jetzt ist der Button des zweiten RouteElement grün, obwohl es eigentlich blau sein soll. Jede Hilfe wird sehr geschätzt!

Dieser „Fehler“ geschieht nur auf Android mit der neuesten Paket von Xamarin.Forms

<package id="Xamarin.Forms" version="2.3.3.193" targetFramework="monoandroid70" /> 

Es auf Android mit diesem Paket von Xamarin.Forms adaequat

<package id="Xamarin.Forms" version="2.2.0.31" targetFramework="monoandroid70" /> 
+0

können Sie das komplette Projekt teilen, um das Problem schnell zu reproduzieren? –

+0

@ YuriS - Kann das nicht tun. –

+0

Ein Testprojekt kann nützlich sein. – Scinfu

Antwort

2

Sind Sie ein bestimmendes ListViewCachingStrategy für Ihre ListView?Sie könnten versuchen, entweder:

_listView = new ListView(ListViewCachingStrategy.RecycleElement); 

oder

_listView = new ListView(ListViewCachingStrategy.RetainElement); 

Das Listview kann falsch die Farbe wiederverwendet (aber nicht der Text/content) von der alten Zelle.

+0

Derzeit testen Sie Ihre Lösung. –

+0

Das RecycleElement, funktioniert auf der Schaltfläche, aber es verwirrt den Text in der benutzerdefinierten Zelle, so dass es auf der linken Seite angeordnet ist. –

+0

Das ist seltsam. Können Sie den Code für das Textlabel in der CustomCell veröffentlichen? –

Verwandte Themen