将TapGestureRecognizer添加到Xaml网格 - 不起作用?

时间:2017-12-12 23:06:01

标签: c# xaml xamarin xamarin.forms

Xamarin Forms 2.5

我有一个ListView,其自定义GroupHeaderTemplate可以很好地呈现:

<ListView.GroupHeaderTemplate>
    <DataTemplate>
        <ViewCell>
            <templates:SummaryCellHeader />
        </ViewCell>
    </DataTemplate>
</ListView.GroupHeaderTemplate>

GroupHeaderTemplate有一个GridTapGestureRecognizer

<Grid>
    <Grid.GestureRecognizers>
        <TapGestureRecognizer Command="{Binding ListHeaderTappedCommand}" />
    </Grid.GestureRecognizers>
</Grid>

TapGestureRecognizer永远不会开火。如果在ListViewHeader之外使用,则此模板有效。

ListView TapGestureRecognizers中是否允许GroupHeaderTemplate

2 个答案:

答案 0 :(得分:1)

问题是标题的绑定上下文是列表显示的数据,而不是视图模型。

为列表视图指定一个名称,然后使用该名称更改命令的绑定上下文源。

<ListView ItemsSource="{Binding ListOfPeople}"
          IsGroupingEnabled="true"
          x:Name="PersonList">

<Grid.GestureRecognizers>
    <TapGestureRecognizer Command="{Binding Source={x:Reference PersonList}, BindingContext.ListHeaderTappedCommand}" />
</Grid.GestureRecognizers>

答案 1 :(得分:0)

谢谢Steve Chadbourne。似乎如果Key是一个复杂的对象而不是一个简单的字符串,你也可以在Key上放置一个Command:

<Grid RowSpacing="0"  >
    <Grid.GestureRecognizers>
        <TapGestureRecognizer Command="{Binding Key.ListHeaderTappedCommand}" />
    </Grid.GestureRecognizers>

好处是您可以获得用于创建列表的Header POCO的引用。这有助于确定要对HeaderClick采取的操作