2015-03-11 2 views
8

Вот моя работа класс:Pass объект щелчком мыши/похлопал обработчик событий в Xamarin Forms

public class Job 
{ 
     public string Id{ get; set;} 
     public string Name{ get; set;} 
} 

И вот мой ListView:

public class JobListePage:ContentPage 
    { 
     // Members 
     private ListView lstView; 

     // Constructor  
     public JobListePage() 
     { 
      // Set members 
      lstView = new ListView(); 

      // Create job objects 
      Job[] jobs = {new Job(){Id="1", Name="Benny"}, new Job(){Id="2", Name="Lukas"}}; 

      // Fill listview with job objects 
      lstView.ItemsSource = jobs; 

      // HOW CAN I PASS THE TAPPED OBJECT HERE??? 
      lstView.ItemTapped += async (o, e) => { 
       await DisplayAlert("Tapped", "HERE I WANT TO SHOW THE ID", "OK"); 
       ((ListView)o).SelectedItem = null; // de-select the row 
      }; 

      .... 

Теперь, как я могу передать постучала «job- объект "к событию?

Вы можете видеть, что я показываю сообщение пользователю. И там он должен выдержать идентификатор объекта, который был использован.

+0

Вы можете просто использовать объект внутри лямбда. Это создаст закрытие, которое сохранит ссылку на него. – Spo1ler

+0

И заголовок вводит в заблуждение, это не событие, а скорее обработчик событий. – Spo1ler

+0

@ Spo1ler Я исправил заголовок. Спасибо. – arnie

ответ

8

попробовать:

 lstView.ItemTapped += async (o, e) => { 
      var myList= (ListView)o; 
      var myJob = (myList.SelectedItem as Job); 
      await DisplayAlert("Tapped", myJob.Id, "OK"); 
      myList.SelectedItem = null; // de-select the row 
     }; 
+0

Это работает !!!!!! Что мне здесь не хватает? Отправитель содержит объект задания? А что ты делаешь? В ролях? Можете ли вы ссылаться на статью, которая объясняет это? Большое спасибо! – arnie

+0

это сочетание разных вещей. 'EventHandler' отправляет' object (o) 'и' eventargs (e) 'в вашем случае отправитель' o' является 'ListView', поэтому вы должны передать объект в список ListView для доступа к его свойствам. Свойство, которое нам нужно в этом случае, это свойство 'SelectedItem', которое является' Job', и мы снова это сделаем (хотя я не уверен, что нам нужно), а затем получить доступ к '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'это статья, объясняющая это (Бокс и Unboxing)] (https://msdn.microsoft.com/en-gb/library/yz2be5wk.aspx) Если этот ответ помог вам, пожалуйста, отметьте его как правильный ответ – user1

+0

идеальное объяснение! не более, чтобы сказать здесь – arnie

6

Следующая страница объясняет, что именно вы ищете: Selecting an Item in a ListView

listView.ItemSelected += async (sender, e) => 
{ 
    await DisplayAlert("Tapped!", (e.SelectedItem as Job).Id + " was tapped.", "OK"); 
}; 

Если вы хотите, чтобы перейти к сдаче аргументов подробно страницы, используйте следующий:

listView.ItemSelected += async (sender, e) => 
{  
     var jobPage = new JobPage(e.SelectedItem as Job); // new page shows correct data   
     await Navigation.PushAsync(jobPage); 
}; 
+1

Спасибо! Также очень хорошо. – arnie

+0

@arnie очень рад помочь –

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

  • Нет связанных вопросов^_^