public override View GetView(int position, View convertView, ViewGroup parent)
        {
            Product product = items [position];

            View view = convertView; // re-use an existing view, if one is available
            if (view == null) { // otherwise create a new one
                view = LayoutInflater.From (context).Inflate (Resource.Layout.BasketItem, parent, false);
                var swipper = ((SwipableListItem)view).SwipeListener;
                swipper.SwipeGestureBegin += (sender, e) => parent.RequestDisallowInterceptTouchEvent (true);
                swipper.SwipeGestureEnd += (sender, e) => parent.RequestDisallowInterceptTouchEvent (false);
                swipper.ItemSwipped += (sender, e) => {
                    // If view has already been processed, do nothing
                    if (view.Parent == null)
                        return;
                    var p = ((ListView)parent).GetPositionForView (view);
                    var order = WebService.Shared.CurrentOrder;
                    order.Remove (order.Products [p]);
                    NotifyDataSetChanged ();
                };
            }

            view.FindViewById<TextView> (Resource.Id.productTitle).Text = product.Name;
            view.FindViewById<TextView> (Resource.Id.productPrice).Text = product.PriceDescription;
            view.FindViewById<TextView> (Resource.Id.productColor).Text = product.Color.ToString();
            view.FindViewById<TextView> (Resource.Id.productSize).Text = product.Size.Description;

            var orderImage = view.FindViewById<ImageView> (Resource.Id.productImage);

            orderImage.SetImageResource (Resource.Drawable.blue_shirt);
            //No need to wait for the async download to return the view
            #pragma warning disable 4014
            orderImage.SetImageFromUrlAsync (product.ImageForSize (Images.ScreenWidth));
            #pragma warning restore 4014
            return view;
        }