Example #1
0
        public PitanjeView(string nazivGraneNavigacija)
        {
            // Instanciranje klase zajednicki elementi aplikacije koja sadrži unificirani gumb
            var zajednickiElementi = new ZajednickiElementiAplikacije();

            // Veza sa view modelom koji je potereban jer view model odrađuje poslovnu logiku aplikacije
            BindingContext = new PitanjeViewModel(nazivGraneNavigacija);

            // Naziv stranice koji se prikazuje u navigacijskom elenentu stranice.
            // Naziv dolazi vezan za command property guba sa prijašnjeg view-a u ovom slučaju temaView

            Title = nazivGraneNavigacija;

            var item = new ToolbarItem
            {
                Text = "Napredak",
            };

            this.ToolbarItems.Add(item);
            item.SetBinding(ToolbarItem.CommandProperty, nameof(PitanjeViewModel.NapredakCommand));

            // Kolekcija koja može biti i samo label jer sadrži vrijednost string pitanja koje se postavlja korsniku
            // Vezan je za ViewModel vrijednost pitanje kolekcija koji sadrži string i koji se vraća u view za prikaz korisniku
            var collectionViewPitanje = new CollectionView
            {
                ItemTemplate = new LablePitanjeTemplate()
            };

            collectionViewPitanje.SetBinding(ItemsView.ItemsSourceProperty, nameof(PitanjeViewModel.PitanjeCollection));

            // Entry polje (bolje poznato kao input korisnik unosi vrijednost riješenja formule koju je napravio na "papiru"
            // Entry je vezan za property OdgovorKorisnika u ViewModelu koji se ažurira u stvarno vremenu automatski
            // Entry polje se ne prikazuje priliku instanciranja Pregleda, postaje vidljivo tek kad se generira prvo pitanje
            var unosOdgovora = new Entry
            {
                Placeholder     = "Unesi odgovor",
                BackgroundColor = Color.White,
                Margin          = new Thickness(20, 10),
                Keyboard        = Keyboard.Numeric
            };

            unosOdgovora.SetBinding(Entry.TextProperty, nameof(PitanjeViewModel.OdgovorKorisnika));
            unosOdgovora.SetBinding(IsVisibleProperty, nameof(PitanjeViewModel.IsVisible));


            var collectionViewMjernaJedinica = new CollectionView
            {
                ItemTemplate = new LableMjernaJedinicaTemplate()
            };

            collectionViewMjernaJedinica.SetBinding(ItemsView.ItemsSourceProperty, nameof(PitanjeViewModel.MjernaJedinicaOdgovoraCollection));

            var obavjestNakonOdgovora = new CollectionView
            {
                ItemTemplate = new LableObavjestOdgvorTemplate()
            };

            obavjestNakonOdgovora.SetBinding(ItemsView.ItemsSourceProperty, nameof(PitanjeViewModel.ObavijestKorisnikuCollection));


            var collectionViewOdgovor = new CollectionView
            {
                ItemTemplate = new LableOdgovorTemplate()
            };

            collectionViewOdgovor.SetBinding(ItemsView.ItemsSourceProperty, nameof(PitanjeViewModel.OdgovorCollection));

            // Button za generiranje novog pitanja
            // Vezano je na ViewModel na ICommand GenerirajPitanjeCommand
            // Pošto je to button koji korisiti primarne boje instancira se iz zajedničkih elemenata
            // Sam gumb je preopterečena metoda za izradu novog gumba jer naziv gumba i commandProperty nisu ista vrijednost
            var generirajPitanjeButton = zajednickiElementi.OtherButton(novoPitanje, nazivGraneNavigacija);

            generirajPitanjeButton.SetBinding(Button.CommandProperty, nameof(PitanjeViewModel.GenerirajPitanjeCommand));

            // Button koji će prikazati korisniku odogovor nakon što je unešeno riješenje i provjereno
            // Pošto je to jedini gumb ovih vrijednosti onda ga ne generiramo iz zajedničkih elelemnata
            // Ali pošto koristi boje aplikacije da bi se održala uniformiranost boju vuče iz zajedničkih elemenata
            // Gumb nije vidljiv dok se ne unese riješenje
            var prikaziOdgovorButton = zajednickiElementi.OtherButton(prikaziRiješenjeButton, prikaziRješenjeNaziv);

            prikaziOdgovorButton.BackgroundColor = zajednickiElementi.NavigacijaDrugaBoja;
            prikaziOdgovorButton.SetBinding(Button.CommandProperty, nameof(PitanjeViewModel.PrikaziOdgovorCommand));
            prikaziOdgovorButton.SetBinding(IsEnabledProperty, nameof(PitanjeViewModel.IsEnabledRiješenje));

            // Gumb koji korsnik uspoređuje svoje rješenje jednadžbe s rješenjem aplikacije
            var provjeriOdgovorButton = zajednickiElementi.OtherButton("Provjeri rješenje");

            provjeriOdgovorButton.BackgroundColor = zajednickiElementi.BackColorGreen;
            provjeriOdgovorButton.SetBinding(Button.CommandProperty, nameof(PitanjeViewModel.ProvjeriOdgovorCommand));
            provjeriOdgovorButton.SetBinding(IsEnabledProperty, nameof(PitanjeViewModel.IsEnabledProvjeriOdgovor));


            // Generiranje mreže koja će držati elemente aplikacije u pregledu za korisnika
            // Mreža ima dvije kolone i 4 reda
            var grid = new Grid
            {
                Margin = new Thickness(10, 10),

                ColumnDefinitions =
                {
                    new ColumnDefinition {
                        Width = new GridLength(1, GridUnitType.Star)
                    },
                    new ColumnDefinition {
                        Width = new GridLength(1, GridUnitType.Star)
                    }
                },

                RowDefinitions =
                {
                    new RowDefinition {
                        Height = new GridLength(0.5, GridUnitType.Star)
                    },
                    new RowDefinition {
                        Height = new GridLength(0.5, GridUnitType.Auto)
                    },
                    new RowDefinition {
                        Height = new GridLength(90, GridUnitType.Absolute)
                    },
                    new RowDefinition {
                        Height = new GridLength(90, GridUnitType.Absolute)
                    },
                    new RowDefinition {
                        Height = new GridLength(70, GridUnitType.Absolute)
                    },
                    new RowDefinition {
                        Height = new GridLength(70, GridUnitType.Absolute)
                    }
                }
            };

            // Dodavanje elementa na sam pregled neki elementi se protežu preko cijelog reda dok drugi zauzimaju jednu od kolona
            grid.Children.Add(collectionViewPitanje, 0, 0);
            Grid.SetColumnSpan(collectionViewPitanje, 2);

            //grid.Children.Add(collectionViewOdgovor, 0, 1);

            grid.Children.Add(unosOdgovora, 0, 1);
            Grid.SetColumnSpan(unosOdgovora, 2);

            grid.Children.Add(collectionViewMjernaJedinica, 0, 2);
            Grid.SetColumnSpan(collectionViewMjernaJedinica, 2);

            grid.Children.Add(obavjestNakonOdgovora, 0, 3);
            Grid.SetColumnSpan(obavjestNakonOdgovora, 2);

            grid.Children.Add(prikaziOdgovorButton, 0, 4);
            Grid.SetColumnSpan(prikaziOdgovorButton, 1);

            grid.Children.Add(provjeriOdgovorButton, 1, 4);
            Grid.SetColumnSpan(provjeriOdgovorButton, 1);

            grid.Children.Add(generirajPitanjeButton, 0, 5);
            Grid.SetColumnSpan(generirajPitanjeButton, 2);

            Content = grid;
        }
Example #2
0
        public NapredakView(string grana)
        {
            BindingContext = new NapredakViewModel(grana);

            Title = $"{grana} napredak";

            var razina = new Label
            {
                TextColor = Color.DarkOrange,
                FontSize  = 50,
                HorizontalTextAlignment = TextAlignment.Center,
                Margin = new Thickness(0, 0, 0, 50)
            };

            razina.SetBinding(Label.TextProperty, nameof(NapredakViewModel.Razina));

            var ukupnoPitanja = new Label
            {
                TextColor = Color.DarkSlateGray,
                FontSize  = 30,
                HorizontalTextAlignment = TextAlignment.Center,
                Margin = new Thickness(0, 0, 0, 50)
            };

            ukupnoPitanja.SetBinding(Label.TextProperty, nameof(NapredakViewModel.Ukupno));

            var postotak = new Label
            {
                TextColor = Color.DarkSlateGray,
                FontSize  = 30,
                HorizontalTextAlignment = TextAlignment.Center,
                Margin = new Thickness(0, 0, 0, 50)
            };

            postotak.SetBinding(Label.TextProperty, nameof(NapredakViewModel.Postotak));

            var razina2 = new Label
            {
                Text      = "Razina 2 min 10 odgovora i postotak > 60%",
                TextColor = Color.DarkSlateGray,
            };

            var razina3 = new Label
            {
                Text      = "Razina 3 min  20 odgovora na razini 2 i postotak > 60%",
                TextColor = Color.DarkSlateGray,
            };

            var nazad = zajednickiElementi.OtherButton("Nazad");

            nazad.HeightRequest = 70;
            nazad.SetBinding(Button.CommandProperty, nameof(NapredakViewModel.NazadCommand));

            var stack = new StackLayout
            {
                Children =
                {
                    razina,
                    ukupnoPitanja,
                    postotak,
                    razina2,
                    razina3,
                },
                VerticalOptions = LayoutOptions.Center
            };

            var grid = new Grid
            {
                Margin = new Thickness(10, 10),

                ColumnDefinitions =
                {
                    new ColumnDefinition {
                        Width = new GridLength(1, GridUnitType.Star)
                    },
                },

                RowDefinitions =
                {
                    new RowDefinition {
                        Height = new GridLength(0.5, GridUnitType.Star)
                    },
                    new RowDefinition {
                        Height = new GridLength(70, GridUnitType.Absolute)
                    }
                }
            };

            grid.Children.Add(stack, 0, 0);

            grid.Children.Add(nazad, 0, 1);

            Content = grid;
        }