【问题标题】:Xamarin Forms ListView ItemSelected functionalityXamarin Forms ListView ItemSelected 功能
【发布时间】:2015-10-27 19:03:42
【问题描述】:

这是一个在从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 会弹出。第一次点击后,detail_clicked里面的DisplayAlert不再弹出。但是处理程序中的其他代码确实被调用了。

有人知道如何解决这个问题吗?我对事件处理程序不了解吗?是关于等待/异步的吗?

【问题讨论】:

  • 您是否尝试过将ItemTapped 事件用于ListView?正如here 所提到的,这两个事件的实现存在差异。我通常总是使用ItemTapped 来监听用户点击ListView 中我希望做某事的元素的事件(例如,导航到新页面以编辑项目,打开显示警报以删除项目等)
  • 是的,除了将此函数附加到ItemTapped 事件之外,我尝试了相同的过程,并且得到了相同的结果。有什么想法吗?

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


【解决方案1】:

DisplayAlert 可能在不同的线程上运行。尝试将 Display Alert 封装在 Device.BeginInvokeOnMainThread 中。你可以准备一下here

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      private void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
          {
              if (e.SelectedItem == null)
              {
      
                  return;
      
              }
      
              listView.SelectedItem = null;
      
              DisplayAlert("Alert", e.SelectedItem.ToString(), "Ok");
      
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-09
        • 2018-03-10
        • 1970-01-01
        • 2017-01-05
        • 2017-02-04
        • 2020-04-09
        • 2019-09-15
        • 2014-09-07
        相关资源
        最近更新 更多