public void Setup(){ mockStaffMemberDataRepository = new Mock<IStaffMember> (); //Set up a template folder templateFolder = new TemplateFolder (); //Create a simple template TemplateViewModel simpleTemplate = new TemplateViewModel (); simpleTemplate.TemplateName = "Back Blaster"; simpleTemplate.TemplateDescription = "Back Blaster Description"; templateFolder.Template = simpleTemplate; //Create 2 simple exercise objects ExerciseViewModel exercise1 = new ExerciseViewModel (); exercise1.SetsIndex = 1; exercise1.RepsIndex = 2; exercise1.WeightIndex = 2; exercise1.SeatPosition1Label = 1; exercise1.SeatPosition1Value = 1; ExerciseViewModel exercise2 = new ExerciseViewModel (); exercise1.SetsIndex = 2; exercise1.RepsIndex = 1; exercise1.WeightIndex = 2; exercise1.SeatPosition1Label = 2; exercise1.SeatPosition1Value = 1; //Add exercises to observable collectin in the template folder templateFolder.Exercises.Add (exercise1); templateFolder.Exercises.Add (exercise2); StaffMember staffMember = new StaffMember (); staffMember.FirstName = "Clay"; staffMember.LastName = "Martin"; staffMember.GymID = 8; staffMember.PhoneNumber = "5024171595"; staffMember.StaffID = 132; templateFolder.StaffMember = staffMember; primaryOptionsViewModel = new PrimaryOptionsViewModel (mockStaffMemberDataRepository.Object, templateFolder); }
public ReviewExercisePage(ExerciseViewModel exercise) { Title = "Review Exercise Details"; Label exerciseNameLabel = new Label { Text = exercise.Exercise.ExerciseName, FontSize = 45 }; Label exerciseCategoryLabel = new Label { Text = exercise.Exercise.Bodypart, FontSize = 40 }; StackLayout exerciseStack = new StackLayout { Orientation = StackOrientation.Vertical, Children = { exerciseNameLabel, exerciseCategoryLabel } }; Image exerciseImage = new Image { HorizontalOptions = LayoutOptions.StartAndExpand, WidthRequest = 180, HeightRequest = 180, }; var exerciseFrame = new Frame { Content = exerciseImage, OutlineColor = Color.Silver, Padding = new Thickness(20), HorizontalOptions = LayoutOptions.EndAndExpand, }; try { if (exercise.Exercise.ImageFile.Trim() != "") { String imageBasePath = "http://www.mymobilefit.com/StrengthImages/"; String finalImagePath = imageBasePath + exercise.Exercise.ImageFile.Trim(); exerciseImage.Source = new UriImageSource { Uri = new Uri(finalImagePath), CachingEnabled = true, CacheValidity = new TimeSpan(5, 0, 0, 0) }; } } catch (Exception e2) { String exceptionMessage = e2.Message; } Label seatPosition1Label = new Label() { Text = exercise.GetSeatPosition1Summary() }; Label seatPosition2Label = new Label { Text = exercise.GetSeatPosition2Summary() }; Label seatPosition3Label = new Label { Text = exercise.GetSeatPosition3Summary() }; Label seatPosition4Label = new Label { Text = exercise.GetSeatPosition4Summary() }; StackLayout exercisePrescriptionHeaderStackLayout = new StackLayout { HorizontalOptions = LayoutOptions.FillAndExpand, Orientation = StackOrientation.Horizontal, Children = { exerciseStack, exerciseFrame } }; Label setLabel = new Label { Text = exercise.GetSetsValue().ToString() }; Label repLabel = new Label { Text = exercise.GetRepsValue().ToString() }; Label weightLabel = new Label { Text = exercise.GetWeightValue().ToString() }; //Set selected index bindings this.BindingContext = exercise; StackLayout labelsStackLayout = new StackLayout { Padding = new Thickness (20), Children = { exercisePrescriptionHeaderStackLayout, new StackLayout { Children = { new Label { Text = "Target Sets: " }, setLabel }, Orientation = StackOrientation.Horizontal, Padding = new Thickness (10), Spacing = 40 }, // entry, new StackLayout { Children = { new Label { Text = "Target Reps: " }, repLabel }, Orientation = StackOrientation.Horizontal, Padding = new Thickness (10), Spacing = 40 }, //editor, new StackLayout { Children = { new Label { Text = "Target Weight (lbs): " }, weightLabel }, Orientation = StackOrientation.Horizontal, Padding = new Thickness (10), Spacing = 40 }, new StackLayout { Children = { new Label { Text = "Seat Pos 1: " }, seatPosition1Label }, Orientation = StackOrientation.Horizontal, Padding = new Thickness (10), Spacing = 35 }, new StackLayout { Children = { new Label { Text = "Seat Pos 2: " }, seatPosition2Label }, Orientation = StackOrientation.Horizontal, Padding = new Thickness (10), Spacing = 35 }, new StackLayout { Children = { new Label { Text = "Seat Pos 3: " }, seatPosition3Label }, Orientation = StackOrientation.Horizontal, Padding = new Thickness (10), Spacing = 35 }, new StackLayout { Children = { new Label { Text = "Seat Pos 4: " }, seatPosition4Label }, Orientation = StackOrientation.Horizontal, Padding = new Thickness (10), Spacing = 35 } } }; this.BackgroundColor = Color.FromRgb(0, 191, 255); this.Padding = new Thickness(10, Device.OnPlatform(20, 0, 0), 10, 0); this.Content = labelsStackLayout; }
public ExercisePage (ExerciseViewModel exercise, bool isExerciseEdit = false, int exid = 1, bool isCreateWorkoutOnly = false, User logFeedbackOnlyUser = null) { InitializeComponent (); Title = isExerciseEdit ? "Edit Exercise Prescription Details" : "Add Exercise Prescription Details"; _viewModel = exercise; _isExerciseEdit = isExerciseEdit; this.BindingContext = _viewModel; if (isCreateWorkoutOnly) { WeightLabel.IsVisible = false; weightEntry.IsVisible = false; } if (_viewModel.Exercise.EquipmentType == "Hold") { RepsLabel.Text = "Hold (Secs): "; } if (_viewModel.Exercise.IsMask) { WeightLabel.Text = "Target Pins:"; } if (_viewModel.Exercise.IsBodyWeight) { WeightLabel.IsVisible = false; } cancelButton.Clicked += (sender, args) => { Action cancelAction = async () => { //Uses session tracking Insights.Track ("Cancel exercise add", new Dictionary<string, string> () { { "Exercise", exercise.Exercise.Exercisename }, { "Exercise id", exercise.Exercise.ExerciseID.ToString () } }); await this.Navigation.PopAsync (); }; DependencyService.Get<ICustomDialog> ().Display ("Cancel exercise add?", "No", "Yes", cancelAction); }; createExerciseButton.Clicked += async (sender, args) => { if ((_viewModel.Sets != 0 && _viewModel.Reps != 0) || _viewModel.Duration != 0) { if (!_isExerciseEdit) { App.WorkoutCreatorContext.Exercises.Add (_viewModel); } //Uses session tracking Insights.Track ("Added exercise to template", new Dictionary<string, string> () { { "Exercise", exercise.Exercise.Exercisename }, { "Exercise id", exercise.Exercise.ExerciseID.ToString () } }); await this.Navigation.PopAsync (); } else { StringBuilder displayMessageSB = new StringBuilder("Exercises cannot be added with 0 "); if(_viewModel.IsCardioExercise){ displayMessageSB.Append("minutes."); }else{ displayMessageSB.Append("sets or 0 reps."); } DependencyService.Get<ICustomDialog> ().Display (displayMessageSB.ToString(), "OK"); } }; if (isExerciseEdit) { ToolbarItem cancelItem = new ToolbarItem { Text = "Cancel", Icon = Device.OnPlatform ("cancel.png", "ic_action_cancel", "Images/cancel.png"), Order = ToolbarItemOrder.Primary }; cancelItem.Clicked += (sender, args) => { Action cancelAction = async () => { //Uses session tracking Insights.Track ("Cancel exercise edit", new Dictionary<string, string> () { { "Exercise", exercise.Exercise.Exercisename }, { "Exercise id", exercise.Exercise.ExerciseID.ToString () } }); await this.Navigation.PopAsync (); }; DependencyService.Get<ICustomDialog> ().Display ("Cancel exercise edit?", "No", "Yes", cancelAction); }; this.ToolbarItems.Add (cancelItem); ToolbarItem deleteItem = new ToolbarItem { Text = "Delete", Icon = Device.OnPlatform ("discard.png", "ic_action_discard.png", "Images/delete.png"), Order = ToolbarItemOrder.Primary }; deleteItem.Clicked += (sender, args) => { Action deleteAction = async() => { //Uses session tracking Insights.Track ("Deleted exercise from exercise list", new Dictionary<string, string> () { { "Exercise", exercise.Exercise.Exercisename }, { "Exercise id", exercise.Exercise.ExerciseID.ToString () } }); exercise.Delete (); App.WorkoutCreatorContext.Exercises.Remove (exercise); await this.Navigation.PopAsync (); }; DependencyService.Get<ICustomDialog> ().Display ("Delete this exercise?", "No", "Yes", deleteAction, true); }; this.ToolbarItems.Add (deleteItem); } }
public ExercisePage_backup (ExerciseViewModel exercise, bool isExerciseEdit = false, int exid = 1) { InitializeComponent (); Title = isExerciseEdit ? "Edit Exercise Prescription Details" : "Add Exercise Prescription Details"; _viewModel = exercise; _isExerciseEdit = isExerciseEdit; this.BindingContext = _viewModel; foreach(int sets in _viewModel.SetOptions) { setPicker.Items.Add(sets.ToString()); }; foreach (int reps in _viewModel.RepOptions) { repPicker.Items.Add(reps.ToString()); }; foreach(int weight in _viewModel.WeightOptions) { weightPicker.Items.Add(weight.ToString()); } if (_viewModel.Exercise.EquipmentType == "Machine") { foreach (string seatPosLabel in ExerciseViewModel.SeatPositionLabelOptions) { seatPositionLabelPicker1.Items.Add (seatPosLabel); seatPositionLabelPicker2.Items.Add (seatPosLabel); seatPositionLabelPicker3.Items.Add (seatPosLabel); seatPositionLabelPicker4.Items.Add (seatPosLabel); } foreach (string seatPosValue in ExerciseViewModel.SeatPositionValueOptions) { seatPositionValuePicker1.Items.Add (seatPosValue); seatPositionValuePicker2.Items.Add (seatPosValue); seatPositionValuePicker3.Items.Add (seatPosValue); seatPositionValuePicker4.Items.Add (seatPosValue); } seatPositionLabelPicker1.SetBinding (Picker.SelectedIndexProperty, "SeatPosition1Label"); seatPositionLabelPicker2.SetBinding (Picker.SelectedIndexProperty, "SeatPosition2Label"); seatPositionLabelPicker3.SetBinding (Picker.SelectedIndexProperty, "SeatPosition3Label"); seatPositionLabelPicker4.SetBinding (Picker.SelectedIndexProperty, "SeatPosition4Label"); seatPositionValuePicker1.SetBinding (Picker.SelectedIndexProperty, "SeatPosition1Value"); seatPositionValuePicker2.SetBinding (Picker.SelectedIndexProperty, "SeatPosition2Value"); seatPositionValuePicker3.SetBinding (Picker.SelectedIndexProperty, "SeatPosition3Value"); seatPositionValuePicker4.SetBinding (Picker.SelectedIndexProperty, "SeatPosition4Value"); } else { seatPositionStack.IsVisible = false; } if (_viewModel.Exercise.EquipmentType == "Hold") { RepsLabel.Text = "Hold (Seconds): "; repPicker.Title = "Secs"; } setPicker.SetBinding (Picker.SelectedIndexProperty, "SetsIndex"); repPicker.SetBinding (Picker.SelectedIndexProperty, "RepsIndex"); if (_viewModel.Exercise.IsBodyWeight) { BodyWeightStack.IsVisible = false; } else { weightPicker.SetBinding (Picker.SelectedIndexProperty, "WeightIndex"); } cancelButton.Clicked += async (sender, args) => { bool confirm = await this.DisplayAlert("Edit Exercise", "Cancel exercise add?", "Yes", "No"); if (confirm) { //Uses session tracking Insights.Track("Cancel exercise add", new Dictionary<string, string>() { {"Exercise", exercise.Exercise.ExerciseName}, {"Exercise id", exercise.Exercise.ExerciseID.ToString()} }); await this.Navigation.PopAsync(); } }; createExerciseButton.Clicked += async (sender, args) => { if (!_isExerciseEdit) { App.WorkoutCreatorContext.Exercises.Add(_viewModel); } //Uses session tracking Insights.Track("Added exercise to template", new Dictionary<string, string>() { {"Exercise", exercise.Exercise.ExerciseName}, {"Exercise id", exercise.Exercise.ExerciseID.ToString()} }); await this.Navigation.PopAsync(); }; if(isExerciseEdit) { ToolbarItem cancelItem = new ToolbarItem { Text = "Cancel", Icon = Device.OnPlatform("cancel.png", "ic_action_cancel", "Images/cancel.png"), Order = ToolbarItemOrder.Primary }; cancelItem.Clicked += async (sender, args) => { bool confirm = await this.DisplayAlert("Edit Exercise", "Cancel exercise edit?", "Yes", "No"); if (confirm) { //Uses session tracking Insights.Track("Cancel exercise edit", new Dictionary<string, string>() { {"Exercise", exercise.Exercise.ExerciseName}, {"Exercise id", exercise.Exercise.ExerciseID.ToString()} // {"Debug Info", errorLog.DebugInfo} }); await this.Navigation.PopAsync(); } }; this.ToolbarItems.Add(cancelItem); ToolbarItem deleteItem = new ToolbarItem { Text = "Delete", Icon = Device.OnPlatform("discard.png", "ic_action_discard.png", "Images/delete.png"), Order = ToolbarItemOrder.Primary }; deleteItem.Clicked += async (sender, args) => { bool confirm = await this.DisplayAlert("Delete Exercise", "Delete this exercise?", "Yes", "No"); if (confirm) { //Uses session tracking Insights.Track("Deleted exercise from exercise list", new Dictionary<string, string>() { {"Exercise", exercise.Exercise.ExerciseName}, {"Exercise id", exercise.Exercise.ExerciseID.ToString()} // {"Debug Info", errorLog.DebugInfo} }); exercise.Delete(); App.WorkoutCreatorContext.Exercises.Remove(exercise); await this.Navigation.PopAsync(); } }; this.ToolbarItems.Add(deleteItem); } }
public ReviewPage(ReviewPageViewModel viewModel, TemplateViewModel optionalTemplate = null) { this.Title = "Review Workouts"; _viewModel = viewModel; if (optionalTemplate != null) { _viewModel.SimpleExerciseCollection = new ObservableCollection<ExerciseViewModel>(); var exerciseListTask = WorkoutTemplateMappingDAL.GetMappingsByTemplateID(optionalTemplate.Id); Action<Task<List<WorkoutTemplateMapping>>> action = (actionResult) => Device.BeginInvokeOnMainThread(async () => { foreach (var mapping in actionResult.Result) { ExerciseViewModel simpleExercise = new ExerciseViewModel(); var exercise = await ExerciseDAL.GetExercisesByExerciseID(App.WorkoutCreatorContext.StaffMember.GymID, mapping.ExerciseID); if (exercise != null && exercise.Id != 0) { simpleExercise.Exercise = exercise; simpleExercise.ImageSource = exercise.ImageSource; simpleExercise.Reps = mapping.Reps; simpleExercise.Sets = mapping.Sets; //simpleExercise.TargetHRMin = mapping.TargetHRMin; //simpleExercise.TargetHRMax = mapping.TargetHRMax; simpleExercise.Duration = mapping.TargetDurationMin; simpleExercise.IsCardioExercise = exercise.CardioExID != 0 ? true : false; _viewModel.SimpleExerciseCollection.Add(simpleExercise); } else { //If exercise is not available manually throw error and log to insights try { throw new Exception("Exercise id " + mapping.ExerciseID.ToString() + "is not in the phone's database"); } catch (Exception e) { Insights.Report(e); } } } }); exerciseListTask.ContinueWith(action); } else { _viewModel.SimpleExerciseCollection = App.WorkoutCreatorContext.Exercises; allowExerciseEdits = true; } //Add reference of review page view model to each exercise view model foreach (var exerciseVM in _viewModel.SimpleExerciseCollection) { exerciseVM.SimpleExerciseCollection = _viewModel.SimpleExerciseCollection; } ListView listView = new ListView { ItemsSource = _viewModel.SimpleExerciseCollection, VerticalOptions = LayoutOptions.FillAndExpand, RowHeight = 100 }; if (allowExerciseEdits) { listView.ItemTemplate = new DataTemplate(typeof(CustomExerciseImageCell)); listView.ItemSelected += (sender, args) => { if (args.SelectedItem != null) { listView.SelectedItem = null; ExerciseViewModel exercise = (ExerciseViewModel)args.SelectedItem; this.Navigation.PushAsync(new ExercisePage(exercise, true, 1, _viewModel.CreateWorkoutOnly, _viewModel.FeedbackOnlyUser)); } }; } else { if (allowExerciseDetailsView) { listView.ItemTemplate = new DataTemplate(typeof(CustomExerciseImageCell)); listView.ItemSelected += (sender, args) => { if (args.SelectedItem != null) { listView.SelectedItem = null; ExerciseViewModel exercise = (ExerciseViewModel)args.SelectedItem; this.Navigation.PushAsync(new ExercisePage(exercise, false, 1, _viewModel.CreateWorkoutOnly, _viewModel.FeedbackOnlyUser), true); } }; } else { listView.ItemTemplate = new DataTemplate(typeof(ImageCell)); } } listView.ItemTemplate.SetBinding(ImageCell.TextProperty, "Identity"); listView.ItemTemplate.SetBinding(ImageCell.ImageSourceProperty, "ImageSource"); this.Content = listView; }
public void Setup(){ mockStaffMemberDataRepository = new Mock<IStaffMember> (); //mockCurrentConnecitivity = new Mock<IConnectivity> (); mockExercise = new Mock<IExercise> (); //Set up a template folder templateFolder = new TemplateFolder (); //Create a simple template TemplateViewModel simpleTemplate = new TemplateViewModel (); simpleTemplate.TemplateName = "Back Blaster"; simpleTemplate.TemplateDescription = "Back Blaster Description"; templateFolder.Template = simpleTemplate; //Create 2 simple exercise objects ExerciseViewModel exercise1 = new ExerciseViewModel (); exercise1.SetsIndex= 1; exercise1.RepsIndex = 2; exercise1.WeightIndex = 2; exercise1.SeatPosition1Label = 1; exercise1.SeatPosition1Value = 1; ExerciseViewModel exercise2 = new ExerciseViewModel (); exercise1.SetsIndex = 2; exercise1.RepsIndex = 1; exercise1.WeightIndex = 2; exercise1.SeatPosition1Label = 2; exercise1.SeatPosition1Value = 1; //Add exercises to observable collectin in the template folder templateFolder.Exercises.Add (exercise1); templateFolder.Exercises.Add (exercise2); StaffMember staffMember = new StaffMember (); staffMember.FirstName = "Clay"; staffMember.LastName = "Martin"; staffMember.GymID = 8; staffMember.PhoneNumber = "5024171595"; staffMember.StaffID = 132; templateFolder.StaffMember = staffMember; exercise = new Exercise (); exercise.ExerciseName = "Barbell Bench Press"; exercise.Bodypart = "Chest"; exerciseList = new List<Exercise> (); exerciseList.Add (exercise); exercise = new Exercise (); exercise.ExerciseName = "Barbell Inclie Bench Press"; exercise.Bodypart = "Chest"; exerciseList = new List<Exercise> (); exerciseList.Add (exercise); exercise = new Exercise (); exercise.ExerciseName = "Barbell Row"; exercise.Bodypart = "Back"; exerciseList = new List<Exercise> (); exerciseList.Add (exercise); exercise = new Exercise (); exercise.ExerciseName = "DB Row"; exercise.Bodypart = "Back"; exerciseList = new List<Exercise> (); exerciseList.Add (exercise); exercise = new Exercise (); exercise.ExerciseName = "DB Shoulder Press"; exercise.Bodypart = "Shoulders"; exerciseList = new List<Exercise> (); exerciseList.Add (exercise); workoutCreatorViewModel = new WorkoutContainerViewModel (templateFolder, mockExercise.Object, new mockCurrentConnectivity()); mockExercise.Setup (x => x.GetAllExercises (staffMember.GymID)).ReturnsAsync(exerciseList); }
public async static Task<bool> SyncServerTemplates(int gymID) { bool success = true; int count = await WorkoutTemplateDAL.GetCountAllTemplatesNoServerTemplateIDs(gymID); if (count > 0) { try { var workoutTemplates = await WorkoutTemplateDAL.GetAllTemplatesNoServerTemplateIDs(gymID); foreach (WorkoutTemplate workoutTemplate in workoutTemplates) { //Determine if workout template is mapped to a member User user = await UserDAL.GetUserByTemplateID(gymID, workoutTemplate.Id); int profileID = 0; if (user != null && user.ProfileID != 0) { profileID = user.ProfileID; } ObservableCollection<ExerciseViewModel> exercises = new ObservableCollection<ExerciseViewModel>(); if (profileID == 0) { List<WorkoutTemplateMapping> exerciseList = await WorkoutTemplateMappingDAL.GetMappingsByTemplateID(workoutTemplate.Id); foreach (var mapping in exerciseList) { ExerciseViewModel simpleExercise = new ExerciseViewModel(); Exercise exercise = await ExerciseDAL.GetExercisesByExerciseID(gymID, mapping.ExerciseID); simpleExercise.Exercise = exercise; simpleExercise.ImageSource = exercise.ImageSource; simpleExercise.Reps = mapping.Reps; simpleExercise.Sets = mapping.Sets; exercises.Add(simpleExercise); } } else { List<UserWorkoutTemplateMapping> exerciseList = await UserWorkoutTemplateMappingDAL.GetMappingsByUserProfileID(profileID); foreach (var mapping in exerciseList) { ExerciseViewModel simpleExercise = new ExerciseViewModel(); Exercise exercise = await ExerciseDAL.GetExercisesByExerciseID(gymID, mapping.ExerciseID); simpleExercise.Exercise = exercise; simpleExercise.ImageSource = exercise.ImageSource; simpleExercise.Reps = mapping.TargetReps; simpleExercise.Sets = mapping.TargetSets; //Add weight and seat positions simpleExercise.Weight = (int)mapping.TargetWeight; exercises.Add(simpleExercise); } } //Send template to the service //If member mapped to template make call with profileID, otherwise profileID will be 0 await WorkoutTemplateMappingDAL.SubmitWorkout(exercises, workoutTemplate, profileID); } } catch (Exception e) { success = false; Insights.Report(e); //ErrorLogDAL.AddErrorLogRecord (e, DateTime.UtcNow, gymID, "SyncServerTemplates", "", e.Message, e.StackTrace); } } return success; }
private Frame GetExerciseFrame(Exercise exercise) { StackLayout exerciseStackLayout = new StackLayout { Orientation = StackOrientation.Horizontal, VerticalOptions = LayoutOptions.FillAndExpand, Spacing = 0, }; StackLayout exerciseLabelContainerStack = new StackLayout { Padding = new Thickness(0, 0, 5, 0), Spacing = 10 }; var exerciseFrame = new Frame { Content = exerciseStackLayout, HasShadow = false, BackgroundColor = (Color)Application.Current.Resources["ymcaLightBlue"] }; var tapGestureRecognizer2 = new TapGestureRecognizer(); tapGestureRecognizer2.Tapped += async (s2, e2) => { if (_viewModel.IsBusy) { return; } _viewModel.IsBusy = true; await exerciseFrame.FadeTo(0); ExerciseViewModel simpleExercise = new ExerciseViewModel(exercise, _createWorkoutOnly, _logFeedbackOnlyUser); //Uses session tracking Insights.Track("Viewed exercise in exercise container", new Dictionary<string, string>() { { "exercise", simpleExercise.Exercise.Exercisename }, { "exercise id", simpleExercise.Exercise.ExerciseID.ToString () } }); await this.Navigation.PushAsync(new ExercisePage(simpleExercise, false, 1, _createWorkoutOnly, _logFeedbackOnlyUser)); await exerciseFrame.FadeTo(1, 500); _viewModel.IsBusy = false; }; exerciseStackLayout.GestureRecognizers.Add(tapGestureRecognizer2); Label exerciseCategoryLabel = new Label { Text = exercise.ExerciseType, FontAttributes = FontAttributes.Bold, VerticalOptions = LayoutOptions.Start, Style = (Style)Application.Current.Resources["exerciseNameLabelStyle"] }; Label exerciseNameLabel = new Label { Text = exercise.Exercisename, Style = (Style)Application.Current.Resources["exerciseNameLabelStyle"] }; Image exerciseImage = new Image { Style = (Style)Application.Current.Resources["exerciseImageStyle"], Source = exercise.ImageSource }; exerciseLabelContainerStack.Children.Add(exerciseCategoryLabel); exerciseLabelContainerStack.Children.Add(exerciseNameLabel); //exerciseStackLayout.Children.Add (exerciseNameLabel); exerciseStackLayout.Children.Add(exerciseLabelContainerStack); exerciseStackLayout.Children.Add(exerciseImage); return exerciseFrame; }