Button command binding nicht funktioniert in Xamarin.Formen

Ich würde gerne binden, einen Befehl an die command-Eigenschaft von mein-button. Dieser schien ziemlich einfach, da ich dies getan viele Male zuvor in WPF und der Methode, die hier ist sehr ähnlich. Lassen Sie mich zeigen einige code-snippets.

XAML

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
         x:Class="MyApp.View.CustomPage"
         Title="Something">

<ContentPage.Content>
    <StackLayout>
        <Button x:Name="numBtn" Text="Increase number" Command="{Binding IncreaseCommand}" />
        <Label x:Name="numLabel" Text="{Binding numberText}" />
    </StackLayout>
</ContentPage.Content>
</ContentPage>

Code-behind -

public partial class CustomPage : ContentPage
{   
    public CustomPage ()
    {
        InitializeComponent ();
        BindingContext = ViewModelLocator.ViewModel();  //ViewModelLocator is singleton, gives
                                                        //you a ViewModel instance
    }
}

ViewModel

public ICommand IncreaseCommand { get; private set; }
private int number;
public string numberText { get; private set;}

Konstruktor:

public ViewModel()
{
    IncreaseCommand = new Command (() => IncreaseExecuted ());
    number = 0;
    numberText = number.ToString ();
    OnPropertyChanged (numberText);
}

dann

private void IncreaseExecuted()
{
    number++;
    numberText = number.ToString ();
    OnPropertyChanged (numberText);
}

Wenn ich die app mit Xamarin Android Player (KitKat) sehe ich den button und das label Lesen 0. Dann drücke ich den Knopf und nichts passiert. Ich habe versucht, die Kontrolle was passiert mit den breakpoints, die app jedoch nicht anhalten, auch nicht, wenn Sie in den Konstruktor von meinem ViewModel. Ich denke, es ist etwas zu tun mit dem emulator. Wie auch immer, ich denke, die Bindung ist ok, da kann ich sehen, eine "0" auf dem Bildschirm. Was könnte das problem sein? Lassen Sie mich zeigen, meine Klasse ViewModelBase nur für den Fall:

ViewModelBase

public abstract class ViewModelBase : INotifyPropertyChanged
{

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(String propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

Vielleicht mein numberText - Eigenschaft nicht aktualisiert, wenn ich rufe OnPropertyChanged? Aber ich habe den genauen gleichen Klasse ViewModelBase mehrmals vor, und es funktionierte immer gut. Eine Letzte Sache, meine CustomPage Seite ist verpackt in eine NavigationPage was ist ein Kind einer TabbedPage:

MainPage.xaml.cs

this.Children.Add (new NavigationPage (new CustomPage ()) {Title="Something"} );

Diese sollten nicht auf irgendetwas, aber es ist nur für den Fall. Also, was ist falsch mit meinem Befehl verbindlich? Vielen Dank im Voraus!

Schreibe einen Kommentar