Распознаватель жестов go до деталей - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть страница с карточками, и как только я нажму на одну, мне нужно получить подробные данные. У меня есть распознаватель жестов, поэтому я могу перейти на вторую страницу, но без подробностей. Я пытался добавить TapGesture в XAML, но это не сработало.

This is my xaml 
                            <grial:Repeater
                        Padding="0"
                        ItemsSource="{ Binding ListOfBestSellers }"
                        Orientation="Horizontal"
                        HeightRequest="200"
                        Spacing="0"

                        VerticalOptions="End"
                        ScrollBarVisibility="Never">

                                <grial:Repeater.ItemTemplate>
                                <DataTemplate >
                                    <local:AvatArticleBrowserCardItemTemplate
                                Padding="10,0,5,5"
                                WidthRequest="150" >
                                    </local:AvatArticleBrowserCardItemTemplate>

                                </DataTemplate>
                            </grial:Repeater.ItemTemplate>
                            </grial:Repeater>

and Template 

<ContentView.Content>
        <grial:CardView 
            VerticalOptions="Fill"
            CornerRadius="5" x:Name="articleCard">

            <grial:CardView.RowDefinitions>
                <RowDefinition
                    Height="*" />
                <RowDefinition
                    Height="Auto" />
            </grial:CardView.RowDefinitions>

            <!-- ARTICLE IMAGE -->
            <ffimageloading:CachedImage
                Grid.Row="0"
                Margin="-14,0,-14,10"
                Source="{ Binding BackgroundImage }"
                Aspect="AspectFill" />

            <Grid
                Grid.Row="1"
                VerticalOptions="End"
                RowSpacing="10"
                Padding="14,10">

                <!-- TITLE -->
                <Label
                    Grid.Row="0"
                    Text="{ Binding Title }"
                    FontSize="15"
                    Style="{ StaticResource LabelBoldStyle }"
                    TextColor="{ DynamicResource AccentColor }" />

                <!-- CATEGORY -->
                <Label
                    Grid.Row="1"
                    Text="{ Binding Section }"
                    FontSize="12"
                    VerticalOptions="Start" />

                <!--  DATE -->
                <Label
                    Grid.Row="1"
                    Text="{ Binding When }"
                    FontSize="12"
                    VerticalOptions="Start"
                    HorizontalOptions="End" />

            </Grid>
        </grial:CardView>
    </ContentView.Content>

This is what i have

async void GoToCardDetail(object sender, EventArgs e)
        {
            if (LangUpLoggedUser.LoggedIn)
            {
                await Navigation.PushAsync(new MyArticle());
            }
            else
            {
                await Navigation.PushAsync(new Login());
            }

        }
        private void CardDetail()
        {
            articleCard.GestureRecognizers.Clear();
            TapGestureRecognizer gestureRecognizerArticleDetail = new TapGestureRecognizer();
            gestureRecognizerArticleDetail.Tapped += GoToCardDetail;
            articleCard.GestureRecognizers.Add(gestureRecognizerArticleDetail);

        }

But its not giving me detailed data, on my list view from other page i have this 
private async void ListView_ItemTapped(object sender, ItemTappedEventArgs e)
        {
#if !NAVIGATION
            var selectedItem = ((ListView) sender).SelectedItem;
            var articlePage = new MyArticle(selectedItem as ArticleDetailData);

            await Navigation.PushAsync(articlePage);
#endif

        }

myArticle const

public MyArticles()
        {
            InitializeComponent();
            BindingContext = new MyArticlesListViewModel(null);

        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="articles"></param>
        /// <param name="categoryName"></param>
        public MyArticles(List<Article> articles, string categoryName)
        {
            _categoryName = categoryName;
            InitializeComponent();
            BindingContext = new MyArticlesListViewModel(articles);



        }

И это прекрасно работает? Можете ли вы помочь мне, как достичь того же результата?

1 Ответ

0 голосов
/ 27 апреля 2020

вам нужно передать выбранный элемент конструктору MyArticle

var card = (CardView) sender;
var item = (ArticleDetailData)card.BindingContext;
await Navigation.PushAsync(new MyArticle(item));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...