2017-06-27 6 views
0

Ich versuche, den Text eines Etiketts auf der Vorderseite des Endes meiner App zu aktualisieren. Momentan verwende ich Message Center, um eine Benachrichtigung an das Ansichtsmodell zu senden und eine Nummer zu erhöhen, die auf dem Etikett in der Ansicht aktualisiert werden soll. Im mit Xamarin Forms und PCL. Ich kann die Nummer in der Debugging abmelden, damit ich weiß, dass das Nachrichtencenter funktioniert. Aber es aktualisiert die Ansicht nicht.Etikettentext wird nicht von ViewModel aktualisiert Xamarin Forms

die entsprechende XAML:

<Label Text="{Binding counter}" 

      Grid.Row="0"/> 

Der Code hinter:

public partial class DriverDashboardView : ContentPage 
{ 
    private DriverDashboardViewModel driverdashboardviewmodel; 

    public DriverDashboardView() 
    { 

     InitializeComponent(); 

     this.Title = "Driver's Dashboard"; 
     BindingContext = driverdashboardviewmodel = new DriverDashboardViewModel(); 
     dataList.ItemTapped += DataList_ItemTapped; 


    } 

    private void DataList_ItemTapped(object sender, ItemTappedEventArgs e) 
    { 
     DisplayAlert("Route Information","Various Data","OK"); 
    } 

    protected async override void OnAppearing() 
    { 
     base.OnAppearing(); 
     await driverdashboardviewmodel.GetLabelInfo(); 
    } 

} 

The View Modell:

public class DriverDashboardViewModel:BaseViewModel,INotifyPropertyChanged 
{ 

    private int messageCounter { get; set; } 
    public string counter { get { return messageCounter.ToString(); } 
         set { 
          if (Equals(value, messageCounter)) return; 
          messageCounter = Convert.ToInt32(value); 
          OnPropertyChanged(nameof(counter)); 

          } } 


    public DriverDashboardViewModel() 
    { 

     MessagingCenter.Subscribe<App>((App)Application.Current, "Increase", (variable) => { 

      messageCounter++; 
     }); 

    } 



    public event PropertyChangedEventHandler PropertyChanged; 
    protected void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, 
       new PropertyChangedEventArgs(propertyName)); 
    } 
} 

und der entsprechende Abschnitt, der die Mitteilungszentrale implementiert:

Foregroundmessages.cs:

MessagingCenter.Send((App)Xamarin.Forms.Application.Current, "Increase");

Da das Zentrum gut funktioniert Messaging angegeben. Es kommt so weit wie das Ansichtsmodell, aktualisiert die Zählervariable jedoch nicht für die Ansicht. Ich habe versucht, den Zähler als ein int und eine Zeichenkette daher die Konvertierung in die get und setzen. Ich habe auch beobachtbare Sammlung versucht, aber das schien überflüssig, weil es eine einzige Variable, keine Sammlung oder Liste ist.

Irgendwelche Ideen?

Antwort

2

Ihr Code aktualisiert die private messageCounter Eigenschaft, nicht die öffentliche counter Eigenschaft, an die Sie gebunden sind. Die Aktualisierung messageCounter führt nicht dazu, dass PropertyChanged ausgelöst wird.

MessagingCenter.Subscribe<App>((App)Application.Current, "Increase", (variable) => { 
    messageCounter++; 
}); 
+0

Können Sie weiter ausführen? Denkst du, dass ich den Zähler vielleicht gleich dem Nachrichtenzähler setzen sollte, nachdem der Nachrichtenzähler inkrementiert wurde? – user3355961

+0

warum inkrementieren Sie Zähler nicht direkt? Du machst das komplexer, als es sein muss. – Jason

+0

ok. Dies hält den Zähler erhalten und gleich gesetzt? Oder muss das geändert werden? – user3355961

Verwandte Themen