Пример #1
0
        async void OnPickerSelectedIndexChanged(object sender, EventArgs e)
        {
            var    picker                   = (Picker)sender;
            int    selectedIndex            = picker.SelectedIndex;
            string calificacionCategoriaUid = picker.StyleClass[0];
            string calificacionElementoUid  = picker.StyleClass[1];
            bool   initialPickerChanged     = Convert.ToBoolean(picker.StyleClass[2]);

            // update limits for corresponding slider
            CalificacionElemento calificacionElemento = calificacionElementoDict[calificacionElementoUid];

            setSliderLimits(selectedIndex, calificacionElemento, initialPickerChanged);

            if (!initialPickerChanged)
            {
                // persist Elemento nivel change
                calificacionElemento.Nivel = selectedIndex;
                await FirebaseDB.updateCalificacionElemento(asignaturaUid, evaluacionUid, calificacionUid, calificacionCategoriaUid, calificacionElementoUid, calificacionElemento);

                // update dictionary to reflect the changes
                calificacionElementoDict[calificacionElementoUid] = calificacionElemento;
            }
            // set boolean to false to persist successive onPickerChanged events
            picker.StyleClass = new ObservableCollection <string>()
            {
                calificacionCategoriaUid, calificacionElementoUid, "false"
            };
        }
Пример #2
0
        protected async override void OnAppearing()
        {
            base.OnAppearing();
            calificacionCategorias = await FirebaseDB.getCategoriasForCalificacion(asignaturaUid, evaluacionUid, calificacionUid);

            var layout = new StackLayout {
                Margin = new Thickness(20, 20, 20, 20)
            };

            foreach (CalificacionCategoria categoria in calificacionCategorias)
            {
                var categoriaLabel = new Label
                {
                    Text = categoria.CategoriaName
                };
                layout.Children.Add(categoriaLabel);

                List <CalificacionElemento> calificacionElementos = await FirebaseDB.getElementsForCalificacion(asignaturaUid, evaluacionUid, calificacionUid, categoria.Uid);

                foreach (CalificacionElemento elemento in calificacionElementos)
                {
                    // save calificacion elemento to update slider range later
                    elemento.CalificacionCategoriaUid = categoria.Uid;
                    calificacionElementoDict.Add(elemento.Uid, elemento);

                    var elementLayout = new StackLayout
                    {
                        Orientation = StackOrientation.Horizontal,
                        Margin      = new Thickness(20, 0, 0, 0)
                    };

                    var elementoLabel = new Label
                    {
                        Text = elemento.ElementoName
                    };

                    // elementoSlider and sliderValuelabel have to be declard before Picker since they are  accessed during initial Picker-index setting
                    var elementoSlider = new Slider
                    {
                        Minimum         = 0,
                        Maximum         = 1,
                        Value           = 0.5,
                        WidthRequest    = 100,
                        VerticalOptions = LayoutOptions.FillAndExpand,
                        StyleId         = elemento.Uid                 // bind elementoUid to slider for identification in ValueChanged callback
                    };
                    elementoSlider.ValueChanged += OnSliderValueChanged;
                    sliderDict.Add(elemento.Uid, elementoSlider);

                    sliderValuelabel = new Label
                    {
                        Text = elemento.Nota.ToString()
                    };

                    labelDict.Add(elemento.Uid, sliderValuelabel);

                    var elementoPicker = new Picker
                    {
                        HorizontalOptions = LayoutOptions.FillAndExpand,
                        StyleClass        = new ObservableCollection <string>()
                        {
                            categoria.Uid, elemento.Uid, "true"
                        },                                                                                      // misuse StyleClass to set values to each picker
                        ItemsSource = new List <string>()
                        {
                            elemento.Nivel1Name, elemento.Nivel2Name, elemento.Nivel3Name, elemento.Nivel4Name
                        },
                    };
                    elementoPicker.SelectedIndexChanged += OnPickerSelectedIndexChanged;
                    elementoPicker.SelectedIndex         = elemento.Nivel;

                    elementLayout.Children.Add(elementoLabel);
                    elementLayout.Children.Add(elementoPicker);
                    elementLayout.Children.Add(elementoSlider);
                    elementLayout.Children.Add(sliderValuelabel);

                    layout.Children.Add(elementLayout);
                }
            }

            var btn = new Button {
                Text = "Guardar"
            };

            btn.Clicked += async(sender, ea) => {
                foreach (KeyValuePair <string, CalificacionElemento> entry in calificacionElementoDict)
                {
                    CalificacionElemento calificacionElemento = entry.Value;
                    await FirebaseDB.updateCalificacionElemento(asignaturaUid, evaluacionUid, calificacionUid, calificacionElemento.CalificacionCategoriaUid, calificacionElemento.Uid, calificacionElemento);
                }

                CalificacionEvaluacion calificacion = await FirebaseDB.getCalificacionById(asignaturaUid, evaluacionUid, calificacionUid);

                calificacion.Nota = await calculateNewAverage();

                await FirebaseDB.updateCalificacion(asignaturaUid, evaluacionUid, calificacionUid, calificacion);

                await Navigation.PopAsync();
            };

            layout.Children.Add(btn);
            Content = layout;
        }