private void finishClick(object sender, RoutedEventArgs e) { if (validacijaPraznihPolja()) { // pamtimo stanje alikacije pre nego sto uradimo dodavanje novog StanjeAplikacije staroStanje = new StanjeAplikacije(); staroStanje.RacunarskiCentar = DeepClone(racunarskiCentar); staroStanje.TipPodataka = "smer"; staroStanje.Kolicina = indeksi.Count; staroStanje.TipPromene = "izmena"; foreach (int index in indeksi) { staroStanje.Oznake.Add(tabelaSmerova[index].Oznaka); } foreach (int index in indeksi) { Smer smerIzmena = racunarskiCentar.Smerovi[tabelaSmerova[index].Oznaka]; bool nazivPromenjen = false; if (NazivSmera.Text.Trim() != "") { smerIzmena.Naziv = NazivSmera.Text.Trim(); nazivPromenjen = true; } if (OpisSmera.Text.Trim() != "") { smerIzmena.Opis = OpisSmera.Text.Trim(); } if (DatumUvodjenja.Text.Trim() != "") { smerIzmena.Datum = DateTime.Parse(DatumUvodjenja.Text.Trim()).ToString("dd/MM/yyyy"); } if (smerIzmena.Predmeti.Count > 0 && nazivPromenjen) { foreach (string predmet in smerIzmena.Predmeti) { racunarskiCentar.Predmeti[predmet].SmerDetalji = "Oznaka: " + smerIzmena.Oznaka + "\nNaziv: " + smerIzmena.Naziv; } } tabelaSmerova[index] = smerIzmena; } Application.Current.Dispatcher.Invoke(() => { notifierMainWindow.ShowSuccess("Uspešno ste izmenili smerove!"); }); // na undo stek treba da upisemo staro stanje aplikacije // generisemo neki novi kljuc pod kojim cemo cuvati prethodno stanje na steku string kljuc = Guid.NewGuid().ToString(); // proveravamo da li vec ima 10 koraka za undo operaciju, ako ima, izbacujemo prvi koji je ubacen kako bismo // i dalje imali 10 mogucih koraka, ali ukljucujuci i ovaj novi if (prethodnaStanjaAplikacije.Count >= 2) { prethodnaStanjaAplikacije.RemoveAt(0); } prethodnaStanjaAplikacije.Add(kljuc, staroStanje); stekStanja.GetUndo().Push(kljuc); // postavljamo flag na true, da bismo mogli da omogucimo klik na dugme za undo operaciju potvrdaIzmena = true; this.Close(); } }