2016-03-26 6 views
2

Я пытаюсь создать свое первое, простое приложение с Xamarin.Forms.Binding ToolbarItem Нажмите в Xamarin.Forms

В этом приложении у меня есть ContentPage с ListView и панель инструментов (внутри NavigationPage).

Панель инструментов имеет панель инструментов, которая должна запускать метод при нажатии. Хотя я искал Google тонкий, я просто не могу заставить его работать ...

Может ли кто-нибудь сказать мне, что мне не хватает?

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"); 
       }); 

     } 
    } 
//... 

Я пробовал:

  1. То, что вы видите выше
  2. Создание панели инструментов и кнопку только через C# (И добавление async() => { ... } параметр конструктора ToolbarItem)
  3. регулярный Ol»(object sender, System.EventArgs e) => { ... } событие слушателя (через код с .Clicked +=)

ответ

0

Я думаю, что это обязательный контекст проблемы. Если у вас есть команда в отдельный класс (в идеале ViewModel) и использовать это в качестве переплета контекста для вашей страницы, то он должен работать, как ожидалось

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

в качестве альтернативы, вы можете просто установить this.BindingContext = это; – Jason

+0

, который не работает должным образом в моем тесте. Ты пробовал? –

Смежные вопросы