如何通过点击的事件处理程序传递绑定属性



我在ListView中使用了TapGestureRecognizer,其中包含Tapped Event handler。 我想从 Span 传递到属性背后的代码,如下所示:

XAML

<ListView ItemsSource="{Binding GetCases}" HasUnevenRows="True">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <ViewCell>
                            <ViewCell.View>
                                <StackLayout Margin="20,0,20,0">
                                    <Label Text="Case Reference:" FontSize="14" TextColor="Green"/>
                                    <Label FontSize="12" TextColor="Blue" FontAttributes="Bold">
                                        <Label.FormattedText>
                                            <FormattedString>
                                                <Span Text="{Binding Ref}" TextColor="Blue" TextDecorations="Underline">
                                                    <Span.GestureRecognizers>
                                                        <TapGestureRecognizer Tapped="TapGestureRecognizer_OnTapped"  NumberOfTapsRequired="1" />
                                                    </Span.GestureRecognizers>
                                                </Span>
                                            </FormattedString>
                                        </Label.FormattedText>
                                    </Label>
                                </StackLayout>
                            </ViewCell.View>
                        </ViewCell>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>

我的事件处理程序(属性 Ref,是我要从 XAML 检索的事件处理程序(

  private void TapGestureRecognizer_OnTapped(object sender, EventArgs e)
    {
        var tappedPost = sender as Cases;  // Cases is my model with the Ref property
        Navigation.PushAsync(new CaseViewModel(tappedPost.Ref));
    }

我会从 Xaml 中检索 Ref 属性,如上所示。 由于列表视图,命令对我不起作用(我已经尝试过了(。 只有点击处理程序对我有用,但不幸的是,它没有检索该属性。 有人来帮我吗? 谢谢。

sender应该是GestureRecognizer附加到的元素(在您的情况下,span

private void TapGestureRecognizer_OnTapped(object sender, EventArgs e)
{
    var span = (Span)sender;
    var case = (Cases)span.BindingContext;
    // you could also use span.Text
    Navigation.PushAsync(new Cases(case.Ref));
}

最新更新