1

Ich möchte die Zurück-Schaltfläche des Navigationselements binden und wenn der Benutzer auf die Zurück-Schaltfläche klickt, möchte ich Code ausführen, der in View-Modell gebunden ist.Xamarin iOS: MvvMCross Binding zurück button von navigationItem

Mein aktueller Code:

Ausblick:

var bSet = this.CreateBindingSet<xView, xViewModel>(); 
      bSet.Bind(NavigationItem.LeftBarButtonItem).To(vm => vm.CheckIfLoading); 
      //bSet.Bind(NavigationItem.BackBarButtonItem).To(vm => vm.CheckIfLoading); 

Ansichtsmodell:

private ICommand checkIfLoading; 
public xViewModel() 
      : base() 
     { 
      this.messenger = mvxMessenger; 
      checkIfLoading = new MvxCommand(DoRefresh); 
     } 
public ICommand CheckIfLoading { get { return checkIfLoading; } } 
private async void DoRefresh() 
{ 
    await Task.Delay(5000); 
} 

Wann immer ich die Zurück-Taste getroffen, ich will es DoRefresh(), aber es ist nicht zu schlagen . Kann jemand den Fehler aufzeigen oder mir helfen, es zu lösen?

Antwort

3

können Sie den folgenden Code verwenden Clicked auf Ihre ICommand zu binden:

this.AddBindings(new Dictionary<object, string>() 
{ 
    { NavigationItem.LeftBarButtonItem, "Clicked CheckIfLoading" } 
}); 

Exkurs

Die folgende Zeile möglicherweise nicht, wenn Clicked nicht der Standard ist verbindlich: bSet.Bind(NavigationItem.LeftBarButtonItem).To(vm => vm.CheckIfLoading);

Othe

bSet.Bind(NavigationItem.LeftBarButtonItem).For(lb => lb.Clicked).To(vm => vm.CheckIfLoading);

Aber in diesem Fall, das wird nicht funktionieren, da lb.Clicked eine linke Hand seitige Aktion erwartet (+= oder -=): r Möglichkeiten, um eine bestimmte Eigenschaft zu binden, können unter Verwendung des .For(labda) Verfahrens wie folgt erreicht werden

Weitere Informationen zum Thema Bindung finden Sie unter https://github.com/MvvmCross/MvvmCross/wiki/databinding