Xamarin表单ListView ItemSelected功能

时间:2015-10-27 19:03:43

标签: android listview async-await xamarin.android xamarin.forms

这是从ListView

中选择项目时调用的函数
async void detail_clicked(object sender, SelectedItemChangedEventArgs e){
    if (e.SelectedItem == null) {
            return;
    }
    Detail selected = (Detail)e.SelectedItem;
    order_vm.List_of_details.Add(selected);
    await DisplayAlert ("Item Added", 
        String.Format ("{0} added to cart.", selected.detail_name), "Okay");
    ((ListView)sender).SelectedItem = null;
}

我使用ItemSelected事件处理程序

添加了此函数
details_list.ItemSelected += detail_clicked;

我第一次点击该项目时会弹出DisplayAlert。首次点击后,DisplayAlert内的detail_clicked不再弹出。但是处理程序中的其他代码会被调用。

任何人都知道如何解决此问题?这是我对事件处理程序不了解的事情吗?它是关于await / async吗?

3 个答案:

答案 0 :(得分:0)

DisplayAlert可能正在另一个线程上运行。尝试在Device.BeginInvokeOnMainThread中包装显示提醒。您可以准备好here

答案 1 :(得分:0)

请在没有异步方法的情况下再次检查并等待DisplayAlert()。

答案 2 :(得分:0)

使用以下代码。它会帮助你。

private void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
    {
        if (e.SelectedItem == null)
        {

            return;

        }

        listView.SelectedItem = null;

        DisplayAlert("Alert", e.SelectedItem.ToString(), "Ok");

    }