/// <summary>
        /// Initializes a new instance of the <see cref="XamarinPowerShop.OrderViewModel"/> class.
        /// </summary>
        /// <param name="tshirt">Tshirt.</param>
        public OrderViewModel(TShirt tshirt)
        {
            Current = tshirt;

            OrderCommand = new Command(x => {
                var now = DateTime.Now;

                var order = new Order
                {
                    IsMen            = IsMen,
                    OrderDate        = now,
                    ProductName      = Current.Name,
                    ProductReference = Current.Reference,
                    Size             = Sizes[SizeIndex],
                    HourSlots        = now.Hour,
                    TimeSlots        = new DateTime(now.Year, now.Month, now.Day)
                };

                var isOrdered = PowerBIClient.Do <bool>(api => api.Insert(api.GetDatasetId(DatasetName), order));

                if (isOrdered)
                {
                    OnOrdered(order);
                }
                else
                {
                    OnFailed();
                }
            });
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="XamarinPowerShop.OrderViewModel"/> class.
        /// </summary>
        /// <param name="tshirt">Tshirt.</param>
        public OrderViewModel(TShirt tshirt)
        {
            Current = tshirt;

            OrderCommand = new Command(x => {
                var now = DateTime.Now;

                var order = new Order
                {
                    IsMen = IsMen,
                    OrderDate = now,
                    ProductName = Current.Name,
                    ProductReference = Current.Reference,
                    Size = Sizes[SizeIndex],
                    HourSlots = now.Hour,
                    TimeSlots = new DateTime(now.Year, now.Month, now.Day)
                };

                var isOrdered = PowerBIClient.Do<bool>(api => api.Insert(api.GetDatasetId(DatasetName), order));

                if(isOrdered)
                    OnOrdered(order);
                else
                    OnFailed();
            });
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="XamarinPowerShop.OrderPage"/> class.
        /// </summary>
        /// <param name="tshirt">Tshirt.</param>
        public OrderPage(TShirt tshirt)
        {
            InitializeComponent(tshirt);
            var viewModel = new OrderViewModel(tshirt);

            viewModel.Failed += async (sender, e) =>
            {
                await DisplayAlert("Failed", "Can't completed your order !", "OK");
                await Navigation.PopModalAsync();
            };

            viewModel.Ordered += async (sender, e) =>
            {
                await DisplayAlert("Many thanks", string.Format("Thanks to purchase a {0}", e.ProductName), "OK");
                await Navigation.PopModalAsync();
            };

            BindingContext = viewModel;
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="XamarinPowerShop.OrderPage"/> class.
        /// </summary>
        /// <param name="tshirt">Tshirt.</param>
        public OrderPage(TShirt tshirt)
        {
            InitializeComponent(tshirt);
            var viewModel = new OrderViewModel(tshirt);

            viewModel.Failed += async(sender, e) =>
            {
                await DisplayAlert("Failed", "Can't completed your order !", "OK");

                await Navigation.PopModalAsync();
            };

            viewModel.Ordered += async(sender, e) =>
            {
                await DisplayAlert("Many thanks", string.Format("Thanks to purchase a {0}", e.ProductName), "OK");

                await Navigation.PopModalAsync();
            };

            BindingContext = viewModel;
        }
        /// <summary>
        /// Initializes the component.
        /// </summary>
        /// <param name="tshirt">Tshirt.</param>
        void InitializeComponent(TShirt tshirt)
        {
            var layout = new StackLayout
            {
                VerticalOptions = LayoutOptions.Center
            };

            var image = new Image
            {
                HorizontalOptions = LayoutOptions.Center,
                Source = tshirt.Image
            };

            var label = new Label { HorizontalOptions = LayoutOptions.Center, Text = tshirt.Name };

            var genderCell = new SwitchCell { Text = "Women / Men" };
            genderCell.SetBinding<OrderViewModel>(SwitchCell.OnProperty, vm => vm.IsMen);

            var sizeLabel = new Label { Text = "Size", HorizontalOptions = LayoutOptions.StartAndExpand, VerticalOptions = LayoutOptions.Center };
            var sizePicker = new Picker { Title = "Small", WidthRequest = 100.0, HorizontalOptions = LayoutOptions.EndAndExpand, VerticalOptions = LayoutOptions.Center };
            sizePicker.Items.Add("Small");
            sizePicker.Items.Add("Medium");
            sizePicker.Items.Add("Large");
            sizePicker.Items.Add("X-Large");
            sizePicker.SetBinding<OrderViewModel>(Picker.SelectedIndexProperty, vm => vm.SizeIndex);

            var sizeLayout = new StackLayout
            {
                Padding = new Thickness(15, 0),
                Spacing = 0,
                Orientation = StackOrientation.Horizontal,
                Children =
                {
                    sizeLabel,
                    sizePicker
                }
            };

            var sizeCell = new ViewCell
            {
                View = sizeLayout
            };

            var optionSection = new TableSection { Title = "Options" };
            optionSection.Add(genderCell);
            optionSection.Add(sizeCell);

            var tableView = new TableView
            {
                Intent = TableIntent.Form,
                HeightRequest = 300.0,
                Root = new TableRoot
                {
                    optionSection
                }
            };

            var buttonCancel = new Button { HorizontalOptions = LayoutOptions.EndAndExpand, Text = "Cancel" };
            buttonCancel.Clicked += async (sender, e) => await Navigation.PopModalAsync();

            var buttonOrder = new Button { HorizontalOptions = LayoutOptions.StartAndExpand, Text = "Purchase" };
            buttonOrder.SetBinding<OrderViewModel>(Button.CommandProperty, vm => vm.OrderCommand);

            var bottomLayout = new StackLayout
            {
                Spacing = 0,
                Orientation = StackOrientation.Horizontal,
                Children =
                {
                    buttonCancel,
                    new Label
                    {
                        HorizontalOptions = LayoutOptions.CenterAndExpand
                    },
                    buttonOrder
                }
            };

            layout.Children.Add(image);
            layout.Children.Add(label);
            layout.Children.Add(tableView);
            layout.Children.Add(bottomLayout);

            Content = layout;
        }
        /// <summary>
        /// Initializes the component.
        /// </summary>
        /// <param name="tshirt">Tshirt.</param>
        void InitializeComponent(TShirt tshirt)
        {
            var layout = new StackLayout
            {
                VerticalOptions = LayoutOptions.Center
            };

            var image = new Image
            {
                HorizontalOptions = LayoutOptions.Center,
                Source            = tshirt.Image
            };

            var label = new Label {
                HorizontalOptions = LayoutOptions.Center, Text = tshirt.Name
            };

            var genderCell = new SwitchCell {
                Text = "Women / Men"
            };

            genderCell.SetBinding <OrderViewModel>(SwitchCell.OnProperty, vm => vm.IsMen);


            var sizeLabel = new Label {
                Text = "Size", HorizontalOptions = LayoutOptions.StartAndExpand, VerticalOptions = LayoutOptions.Center
            };
            var sizePicker = new Picker {
                Title = "Small", WidthRequest = 100.0, HorizontalOptions = LayoutOptions.EndAndExpand, VerticalOptions = LayoutOptions.Center
            };

            sizePicker.Items.Add("Small");
            sizePicker.Items.Add("Medium");
            sizePicker.Items.Add("Large");
            sizePicker.Items.Add("X-Large");
            sizePicker.SetBinding <OrderViewModel>(Picker.SelectedIndexProperty, vm => vm.SizeIndex);

            var sizeLayout = new StackLayout
            {
                Padding     = new Thickness(15, 0),
                Spacing     = 0,
                Orientation = StackOrientation.Horizontal,
                Children    =
                {
                    sizeLabel,
                    sizePicker
                }
            };

            var sizeCell = new ViewCell
            {
                View = sizeLayout
            };

            var optionSection = new TableSection {
                Title = "Options"
            };

            optionSection.Add(genderCell);
            optionSection.Add(sizeCell);

            var tableView = new TableView
            {
                Intent        = TableIntent.Form,
                HeightRequest = 300.0,
                Root          = new TableRoot
                {
                    optionSection
                }
            };

            var buttonCancel = new Button {
                HorizontalOptions = LayoutOptions.EndAndExpand, Text = "Cancel"
            };

            buttonCancel.Clicked += async(sender, e) => await Navigation.PopModalAsync();

            var buttonOrder = new Button {
                HorizontalOptions = LayoutOptions.StartAndExpand, Text = "Purchase"
            };

            buttonOrder.SetBinding <OrderViewModel>(Button.CommandProperty, vm => vm.OrderCommand);

            var bottomLayout = new StackLayout
            {
                Spacing     = 0,
                Orientation = StackOrientation.Horizontal,
                Children    =
                {
                    buttonCancel,
                    new Label
                    {
                        HorizontalOptions = LayoutOptions.CenterAndExpand
                    },
                    buttonOrder
                }
            };

            layout.Children.Add(image);
            layout.Children.Add(label);
            layout.Children.Add(tableView);
            layout.Children.Add(bottomLayout);

            Content = layout;
        }