Xamarin.Forms Tap Gesturer没有回应

时间:2017-10-10 17:47:34

标签: xamarin.forms gestures

在我的XAML中,我有:

<Label Text="{Binding DisplayName}" TextColor="Blue">
   <Label.GestureRecognizers>
      <TapGestureRecognizer Command="{Binding TapCommand}"
                            CommandParameter="{Binding URL}" />
   </Label.GestureRecognizers>
</Label>

在视图模型中(我已经检查了绑定上下文)我有

private ICommand tapCommand;
public ICommand TapCommand
{
    get { return tapCommand; }
}

public LinkReportPageViewModel()
{
    PopulateLinkReport();
    tapCommand = new Command( OnTapped );
}

public void OnTapped( object tappedURL )
{
    Log.LogThis( $"Tapped on {tappedURL}", "LinkReportPageVM", DateTime.Now );
}

我希望当我点击标签时,我会在OnTapped中遇到一个断点,但我没有。我错过了什么吗?

请注意,此标签位于分组列表中。

这是基于https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/gestures/tap/

谢谢!

1 个答案:

答案 0 :(得分:2)

正如Diego所提到的,标签的绑定上下文是ListView绑定的数据项的模型。尝试将其更改为:

<Label Text="{Binding DisplayName}" TextColor="Blue">
   <Label.GestureRecognizers>
      <TapGestureRecognizer Command="{Binding Path=BindingContext.TapCommand, Source={x:Reference NameOfListView}}"
                            CommandParameter="{Binding URL}" />
   </Label.GestureRecognizers>
</Label>

还要确保为ListView提供x:名称

我们告诉命令它的绑定上下文是父ListView,它绑定到包含你的命令的ViewModel。