Xamarin.forms Xamarin表单-将TapGestureRecognitor限制为单个tap

Xamarin.forms Xamarin表单-将TapGestureRecognitor限制为单个tap,xamarin.forms,Xamarin.forms,我在标签上有一个TapGestureRecognitor。使用以下命令处理程序(使用导航到下一页的FreshMVVM PushPageModel)时,所有这些都非常有用 public命令OpenDailyEntry { 得到 { 返回新命令(异步(e)=> { 等待corethods.PushPageModel(null); }); } } 问题是下一个屏幕需要一秒钟左右的时间才能出现,在此之前,用户可以点击多次,导致事件多次触发。在Android上,每次用户点击标签时,都会打开相同的页面 是

我在标签上有一个TapGestureRecognitor。使用以下命令处理程序(使用导航到下一页的FreshMVVM PushPageModel)时,所有这些都非常有用

public命令OpenDailyEntry
{
得到
{
返回新命令(异步(e)=>
{
等待corethods.PushPageModel(null);
});
}
}
问题是下一个屏幕需要一秒钟左右的时间才能出现,在此之前,用户可以点击多次,导致事件多次触发。在Android上,每次用户点击标签时,都会打开相同的页面


是否有一种方法可以防止这种情况发生,而无需在第一次点击后禁用命令的全局标志?

您可以为您的CanExecute方法添加第二个lambda

如果向页面导航服务添加属性,例如IsCurrentlyPushingPage,它跟踪推送到导航堆栈的开始和结束时间,则可以评估此属性并暂时停用OpenDailyEntry命令

public Command OpenDailyEntry
{
    get
    {
        return new Command(async (e) =>
           {
               await CoreMethods.PushPageModel<DailyEntryPageModel>(null);
           },
           () =>
           {
               return CoreMethods.IsCurrentlyPushingPage == false;
           }
        );
    }
}
public命令OpenDailyEntry
{
得到
{
返回新命令(异步(e)=>
{
等待corethods.PushPageModel(null);
},
() =>
{
返回CoreMethods.IsCurrentlyPushingPage==false;
}
);
}
}
public Command OpenDailyEntry
{
    get
    {
        return new Command(async (e) =>
           {
               await CoreMethods.PushPageModel<DailyEntryPageModel>(null);
           },
           () =>
           {
               return CoreMethods.IsCurrentlyPushingPage == false;
           }
        );
    }
}