2016-03-26 3 views
2

Ich versuche meine erste, einfache Anwendung mit Xamarin.Forms zu erstellen.Binding ToolbarItem Klicken Sie in Xamarin.Forms

In dieser App habe ich eine ContentPage mit einem ListView und einer Toolbar (innerhalb einer NavigationPage).

Die Symbolleiste verfügt über ein ToolbarItem, das beim Klicken eine Methode ausführen sollte. Obwohl ich Google dünn gesucht habe, kann ich es einfach nicht zur Arbeit bringen ...

Kann mir jemand sagen, was ich vermisse?

XAML:

<?xml version="1.0" encoding="UTF-8"?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:constants="clr-namespace:FlashCards;assembly=FlashCards" 
x:Class="FlashCards.SetsPage" 
Title="Card Sets"> 
    <ContentPage.ToolbarItems> 
      <ToolbarItem Name="Add" Icon="Icon-Button-Add.png" Command="{Binding CreateCommand}"></ToolbarItem> 
    </ContentPage.ToolbarItems> 
    <ListView x:Name="CardSetView"> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
     <TextCell Text="{Binding Title}" /> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
    </ListView> 
</ContentPage> 

Codebehind:

//... 
public partial class SetsPage : ContentPage 
    { 
     ObservableCollection<CardSet> sets = new ObservableCollection<CardSet>(); 

     public Command CreateCommand { get; private set; } 

     public SetsPage() { 

      InitializeComponent(); 

      sets.Add(new CardSet{ Title = "Test 1" }); 
      sets.Add(new CardSet{ Title = "Test 2" }); 
      sets.Add(new CardSet{ Title = "Test 3" }); 

      CardSetView.ItemsSource = sets; 

      this.CreateCommand = new Command(async (sender) => 
       { 
        Debug.WriteLine("Hello"); 
       }); 

     } 
    } 
//... 

Ich habe versucht:

  1. Was Sie sehen oben
  2. Erstellen der Symbolleiste und die Taste nur durch C# (Und eine 012 hinzufügenParameter an den Konstruktor ToolbarItem)
  3. Eine regelmäßige ol‘(object sender, System.EventArgs e) => { ... } Ereignis-Listener (durch Code mit .Clicked +=)

Antwort

0

Ich denke, es ist ein verbindlicher Rahmen Problem. Wenn Sie den Befehl in eine eigene Klasse (idealerweise ein Ansichtsmodell) und verwenden diese als verbindlich Kontext für Ihre Seite, dann sollte es als

public class MyVm { 
    public MyVm() { 
     this.CreateCommand = new Command((sender) => 
     { 
      Debug.WriteLine("Hello"); 
     }); 
    } 

    public ICommand CreateCommand { get; private set; } 
} 

... 

public SetsPage() { 
     var vm = new MyVm(); 
     this.BindingContext = vm; 

     InitializeComponent(); 
... 
+0

alternativ erwartet funktionieren, könnte man einfach eingestellt this.BindingContext = this; – Jason

+0

das funktioniert nicht wie erwartet in meinem Test. Hast du versucht? –