2017-09-08 3 views
0

Ich habe diesen Code:Wie kann ich eine geklickte Schaltfläche mit meinem Ansichtsmodell verknüpfen?

<Button x:Name="resetButton" Text="Reset All Points to Zero" Command="{Binding ResetButtonClickedCommand}"> 
</Button> 

und einen Blick Modell hinter:

private ICommand resetButtonClickedCommand; 

    public ICommand ResetButtonClickedCommand 
    { 
     get 
     { 
      return resetButtonClickedCommand ?? 
      (resetButtonClickedCommand = new Command(async() => await resetButtonClicked())); 
     } 
    } 

    async Task resetButtonClicked() 
    { 
     if (App.totalPhrasePoints < 100 || await App.phrasesPage.DisplayAlert(
      "Reset score", 
      "You have " + App.totalPhrasePoints.ToString() + " points. Reset to 0 ? ", "Yes", "No")) 
      App.DB.ResetPointsForSelectedPhrase(App.cfs); 
    } 

ich die Bindung richtig gemacht haben, da sie die gleiche Bindung verwendet für viele andere Dinge in der XAML

ist Wenn ich jedoch auf den Button klicke, passiert nichts und meine Breakpoints im Get und der Methode werden nicht erreicht.

Gibt es etwas, was ich falsch mache?

+0

Mögliches Duplikat [Wie kann ich eine Gestenerkenner zu einem Ansichtsmodell C# hinzufügen] (https://stackoverflow.com/questions/46053049/ Wie kann ich ein Gesture-Erkenner-zu-einem-Ansicht-Modell-c-Sharp) – Digitalsa1nt

+0

Warum überprüft die Rückkehr für eine Null-Aufgabe? Es gibt nichts zurück, so dass es nicht null sein kann. Außerdem müssten Sie die Befehlseigenschaft des Buttons nicht verwenden. Ich bin ziemlich sicher, dass Sie die OnClicked-Eigenschaft verwenden und sie Ihrem Ansichtsmodell zuweisen können. – Digitalsa1nt

Antwort

1

Zuerst sicherstellen, dass der Bindungskontext für diese Seite und das Ansichtsmodell festgelegt ist.

Dann schlage ich vor, einen diferent Ansatz, um Ihre Methode:

public YourViewModel() 
{ 
    ... 

    ResetButtonClickedCommand = new Command(ExecuteReset); 

    ... 
} 

private async void ExecuteReset() 
{ 
    if (App.totalPhrasePoints < 100 || await App.phrasesPage.DisplayAlert(
     "Reset score", 
     "You have " + App.totalPhrasePoints.ToString() + " points. Reset to 0 ? ", "Yes", "No")) 
     App.DB.ResetPointsForSelectedPhrase(App.cfs); 
} 
Verwandte Themen