在Xamarin Forms中的click/tapped事件处理程序中传递对象

arn*_*nie 9 c# listview eventargs xamarin xamarin.forms

这是我的工作班:

public class Job
{
        public string Id{ get; set;}
        public string Name{ get; set;}
}
Run Code Online (Sandbox Code Playgroud)

这是我的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
            };

            ....
Run Code Online (Sandbox Code Playgroud)

现在我如何将点击的"作业对象"传递给活动?

您可以看到我向用户显示了一条消息.在那里,它应该支持tapped对象的ID.

use*_*er1 10

尝试:

        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
        };
Run Code Online (Sandbox Code Playgroud)


Roh*_*ews 6

以下页面准确说明了您要查找的内容:在ListView中选择项目

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

如果要导航到传递参数的详细信息页面,请使用以下命令:

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