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

时间:2019-02-12 14:44:39

标签: xaml xamarin mvvm xamarin.forms

我在带有轻击事件处理程序的ListView中具有TapGestureRecognizer。我想从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属性。由于ListView(我已经尝试过),因此命令对我不起作用。只有Tapped处理程序为我工作,但不幸的是,它不检索该属性。有人在帮我吗谢谢。

1 个答案:

答案 0 :(得分:1)

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));
}