public ExpenseActionPage(ReportDetailViewModel parentViewModel)
        {
            NavigationPage.SetTitleIcon(this, "icon.png");
            ViewModel            = new ExpenseActionViewModel(parentViewModel);
            BindingContext       = ViewModel;
            Title                = "New Expense";
            ViewModel.IsEditable = true;

            AddConditionalUI();

            Content = formLayout;
            Padding = new Thickness(0, Device.OnPlatform(20, 0, 0), 0, 0);

            #region Set Bindings And Event Handlers
            nameEntry.SetBinding(Entry.TextProperty, "Name");
            shortDescriptionEntry.SetBinding(Entry.TextProperty, "ShortDescription");
            priceEntry.SetBinding(Entry.TextProperty, "Price", BindingMode.TwoWay, null, "$ {0}");
            date.SetBinding(DatePicker.DateProperty, "Date");

            saveButton.Clicked += (object sender, EventArgs e) =>
            {
                ViewModel.Save();
                Navigation.PopModalAsync();
            };
            cancelButton.Clicked += (object sender, EventArgs e) =>
            {
                Navigation.PopModalAsync();
            };
            #endregion
        }
Esempio n. 2
0
        public ExpenseActionPage(ExpenseModel model = null, bool editable = true)
        {
            NavigationPage.SetTitleIcon(this, "icon.png");
            ViewModel      = new ExpenseActionViewModel(editable);
            BindingContext = ViewModel;
            Title          = "New Expense";

            if (model != null)
            {
                ViewModel.Expense = model;
            }
            //			else
            //				ViewModel.Expense.ReceiptLocation = "ic_insert_photo_white_48dp.png";

            AddConditionalUI();

            Content = formLayout;
            Padding = new Thickness(0, Device.OnPlatform(20, 0, 0), 0, 0);

            #region Set Bindings And Event Handlers
            nameEntry.SetBinding(Entry.TextProperty, "Name");
            shortDescriptionEntry.SetBinding(Entry.TextProperty, "ShortDescription");
            priceEntry.SetBinding(Entry.TextProperty, "Price", BindingMode.TwoWay, null, "$ {0}");
            date.SetBinding(DatePicker.DateProperty, "Date");

            saveButton.Clicked += (object sender, EventArgs e) =>
            {
                var success = ViewModel.Save();

                if (success)
                {
                    Navigation.PopModalAsync();
                }
                else
                {
                    DisplayAlert("Error", "You must enter a Vendor Name, Price and Short Description", "Ok");
                }
            };
            cancelButton.Clicked += (object sender, EventArgs e) =>
            {
                Navigation.PopModalAsync();
            };

            TapGestureRecognizer tap = new TapGestureRecognizer();
            tap.Tapped += async(object sender, EventArgs e) =>
            {
                var result = await DisplayActionSheet("Media Source", "Cancel", null, "Take Picture", "Choose From Gallery");

                switch (result)
                {
                case "Cancel":
                    return;

                case "Take Picture":
                    if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
                    {
                        DisplayAlert("No Camera", "The camera is unavailable.", "OK");
                        return;
                    }
                    else
                    {
                        var file = await CrossMedia.Current.TakePhotoAsync(new StoreCameraMediaOptions
                        {
                            SaveToAlbum = true,
                            Directory   = "Pictures",
                            Name        = ViewModel.Expense.ExpenseId + ".png"
                        });

                        if (file == null)
                        {
                            return;
                        }

                        var source = ImageSource.FromStream(() => file.GetStream());
                        addReceipt.Source = source;
                        DependencyService.Get <IPhoto>().SavePictureToDisk(source, ViewModel.Expense.ExpenseId);

                        file.Dispose();
                    }
                    break;

                case "Choose From Gallery":
                    if (CrossMedia.Current.IsPickPhotoSupported)
                    {
                        var file = await CrossMedia.Current.PickPhotoAsync();

                        if (file == null)
                        {
                            return;
                        }

                        var source = ImageSource.FromStream(() => file.GetStream());
                        DependencyService.Get <IPhoto>().SavePictureToDisk(source, ViewModel.Expense.ExpenseId);
                        addReceipt.Source = source;

                        file.Dispose();
                    }
                    else
                    {
                        DisplayAlert("Sorry", "I Can't seem to find the photo gallery, try just taking a picture", "Dang, Ok");
                        return;
                    }
                    break;
                }
            };
            addReceipt.GestureRecognizers.Add(tap);
            #endregion
        }