WPF: Aktualizacja listy z nowego okna

0

Taka sytuacja:
Mam okno na którym w ListBoxie mam zbindowaną List<Pracownik>.
Pod spodem mam button "Dodaj pracownika", który otwiera nowe okno z ankietą.
Po wypełnieniu wszystkich pól i kliknięciu OK tworzę nowy obiekt typu Pracownik.

I teraz nie wiem: w jaki sposób poprawnie powinienem zaktualizować Listę w głównym oknie?

Dodam, że na chwilę obecną nie korzystam z MVVM, tylko na potrzeby tego drobnego przykładu trzymam wszystko w code behind.

0

Zeby nie odbierac Tobie radosci odkrywcy ;)

http://stackoverflow.com/questions/9391746/how-can-i-data-bind-a-list-of-strings-to-a-listbox-in-wpf-wp7
http://stackoverflow.com/questions/6058280/wpf-binding-list-to-listbox
http://stackoverflow.com/questions/18692738/wpf-c-binding-custom-object-list-data-to-a-listbox

Tipps:
Zeby poinformowac GUI zaimplementuj INotifypropertyChange.
Po utworzeniu nowego obiektu dodaj do listy (lub ObservableCollection).
List.Add() nie musi wywolac settera, a juz przypisanie powinno.
Zobacz ponizej:
MyList.Add(1); //nic
MyList.Add(2); //nic
MyList = MyList; //a tu setter "wskakuje"
}

  private List<int> mylist = new List<int>();

  public List<int> MyList
  {
     get { return mylist; }
     set { mylist = value; }
  } 

Pozdrowienia

0

Pobieżnie wczytałem się w Twój post i linki jakie w nim umieścieś.
Wydaje mi się, że dałeś mi tutorial do zwykłego bindowania. To akurat umiem i rozumiem.
Moje pytanie odnosiło się do trochę bardziej podstawowego zagadnienia programowania: wysyłania danych między klasami.

Jeszcze raz:
Mam Okno1 z listboxem i buttonem "Dodaj nowego pracownika".
Listbox jest już wypełniony listą pracowników i wyświetla ją tak jak ja chcę.
Lista pracowników to zwykły List<Pracownik>;

Po kliknięciu na button uruchamiam prostego kreatora (Okno2), który po wciśnięciu "OK" tworzy nowy obiekt Pracownik.
Czego nie wiem jak zrobić: Jak ten nowy obiekt Pracownik (z Okna2) przetransportować do Listy utworzonej w Oknie1.

Że tak powiem, w jaki sposób rozwiązuje się ten problem? Wydaje mi się, że trzymanie wszystkiego w Codebehind okien jest bardzo ... nieprofesjonalne.

0

Problem rozwiązany:

  • Listę zrobiłem jako
 public List<Pracownik> listaPracownikow { get; set; }
  • W oknie dodawania zrobiłem metodę:
        public void updateMainWindow(Pracownik p)
        {
            var MainWindow = Application.Current.Windows[1] as MainWindow;
            if (MainWindow != null) MainWindow.listaPracownikow.Add(p);
            MainWindow.PracownikListBox.Items.Refresh();

            Console.WriteLine(Application.Current.Windows.Count.ToString());
            Console.WriteLine(Application.Current.Windows[1].ToString());

        } 

I wio.

Nie podoba mi się tylko ta sztywna jedynka w tablicy okien. Wydaje mi się jakby w każdej chwili miała się zmienić. Jest jakieś zgrabniejsze rozwiązanie? Co sądzicie o tym?

0
DrugieOkno drugieOkno = new DrugieOkno();
drugieOkno.Owner = this;
drugieOkno.Show();

a w drugim oknie:

((PierwszeOkno)this.Owner).Metoda()

może tak?

1 użytkowników online, w tym zalogowanych: 0, gości: 1