private void ProductDisplay_AddToCartClicked(object sender, EventArgs e)
        {
            // selected product
            ProductDisplay   element = sender as ProductDisplay;
            ProductViewModel item    = element.BindingContext as ProductViewModel;

            // add a shopping card item
            ((MainViewModel)this.BindingContext).ShoppingCart.IncrementOrder(item);
        }
        private async void TapGestureRecognizer_Tapped(object sender, EventArgs e)
        {
            // the user has tapped on an element
            ProductDisplay element = sender as ProductDisplay;

            // set the binding context to the selected cell
            FakeProductCell.BindingContext = element.BindingContext;
            FakeProductCell.ImageOffsetX   = element.ImageOffsetX;
            FakeProductCell.ImageOffsetY   = element.ImageOffsetY;
            FakeProductCell.Opacity        = 1;
            FakeProductCell.IsVisible      = true;

            // set the selected item
            ((MainViewModel)this.BindingContext).SelectedProduct = element.BindingContext as ProductViewModel;

            // set the layout to the same postion
            var       yScroll = ScrollContainer.ScrollY;
            Rectangle rect    = new Rectangle(
                x: ScrollContainer.X + element.X,
                y: ScrollContainer.Y + element.Y - yScroll,
                width: element.Width,
                height: element.Height);

            AbsoluteLayout.SetLayoutBounds(FakeProductCell, rect);

            // hide the cell we clicked on
            element.Opacity = 0.01;
            await FakeProductCell.ExpandToFill(this.Bounds);

            element.Opacity = 1;

            // display the page popover
            PagePopover.Opacity   = 0;
            PagePopover.IsVisible = true;
            await PagePopover.Expand();
        }