Xamarin表单列表视图项选定导航页面两次

Xamarin表单列表视图项选定导航页面两次,xamarin,xamarin.forms,Xamarin,Xamarin.forms,我有一个列表视图,当单击列表项时,我想打开项目详细信息页面。但当我不止一次快速点击时,它就会打开两个导航页面。我的详细信息页面的常量有一个异步方法。 这是我的密码 如何阻止多次单击 MyPage.xaml <ListView HasUnevenRows="True" SeparatorColor="#e7e5e5" IsPullToRefreshEnabled="True" ItemsSource="{Binding Expe

我有一个列表视图,当单击列表项时,我想打开项目详细信息页面。但当我不止一次快速点击时,它就会打开两个导航页面。我的详细信息页面的常量有一个异步方法。 这是我的密码

如何阻止多次单击

MyPage.xaml

    <ListView      
    HasUnevenRows="True"
    SeparatorColor="#e7e5e5"
    IsPullToRefreshEnabled="True"      
    ItemsSource="{Binding ExpecterDemands}"
    IsRefreshing="{Binding IsBusy, Mode=OneWay}"
    ItemSelected="InfiniteListView_ItemSelected">

如果要防止双击,可以添加一个本地bool来防止它多次运行,只需确保在finally语句中将其设置回false即可

bool _isRunning;

async void InfiniteListView_ItemSelected(object sender, SelectedItemChangedEventArgs e
{
    if (_isRunning)
        return;

    _isRunning = true;

    try
    {
        await Navigation.PushAsync(new DetailPage());
    }
    finally
    {
        _isRunning = false;
    }
}

更好的解决方案是使用
itemstapped
而不是
ItemSelected

ItemSelected
将多次触发


另一方面,
itemstapped
,在点击项目时只触发一次。

在我的情况下,我不能使用
ItemSelected
,我这样修复了
itemstapped
创建一个通用方法
StopMultipleTaps
,该方法将禁用ListView 500毫秒,以便不会捕获另一个快速单击

public void StopMultipleTaps(ListView listView)
    {
        listView.IsEnabled = false;
        Device.StartTimer(TimeSpan.FromMilliseconds(500), () => {
            listView.IsEnabled = true;
            return false;
        });
    }
在ItemHandler的最开始调用上述方法:

    async void InfiniteListView_ItemSelected(object sender, SelectedItemChangedEventArgs e`
    { 
        StopMultipleTaps((ListView)sender);       
        await Navigation.PushAsync(new DetailPage());
    }
    async void InfiniteListView_ItemSelected(object sender, SelectedItemChangedEventArgs e`
    { 
        StopMultipleTaps((ListView)sender);       
        await Navigation.PushAsync(new DetailPage());
    }