Wątek przeniesiony 2016-06-01 13:38 z C# i .NET przez ŁF.

Nie działa z dodawanie elementu do listy z innej klasy

0

Mam liste w klasie (oknie) A, i z poziomu tej klasy(okna) moge dodawać elementy poprzez odpowiednia metode. Jednak kiedy probuje dodac nowe elementy do listy poprzez wspomniana metode z poziomu innego okna B lub klasy B dodawanie do listy nie dziala. Ktos wie dlaczego?

przykład tego jest na github:
https://github.com/abadolon/new

A tutaj kod:

     public class Person
    {
        private string _Name;
        private string _Name2;

        public string Name
        {
            get { return _Name; }
            set { _Name = value; }
        }

        public string Name2
        {
            get { return _Name2; }
            set { _Name2 = value; }
        }
    } 

button1 - Dodaje element w klasie MainWindow poprawnie dodaje poprzez metode :)
button - otwiera nowe okno

     public partial class MainWindow : Window
    {
        public List<Person> Lista = new List<Person>(); 

        public MainWindow()
        {
            InitializeComponent();

           Dodaj();

            dataGrid.ItemsSource = Lista;
        }

        private void button_Click(object sender, RoutedEventArgs e)
        {
            Okno okno = new Okno();
            okno.Show();
        }

        public void Odswiez()
        {
            dataGrid.ItemsSource = Lista;
            dataGrid.Items.Refresh();
        }

        public void Dodaj()
        {
            Lista.Add(new Person() { Name = "asd", Name2 = "asd" });
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            Dodaj();
            Odswiez();
        }
    } 

button - nie dodaje nowego elementu do listy, a wywoluje tylko metode !

     public partial class Okno : Window
    {
        MainWindow mainWindow = new MainWindow();
        public Okno()
        {
            InitializeComponent();
        }

        private void button_Click(object sender, RoutedEventArgs e)
        {
            
            
            mainWindow.Dodaj();
            mainWindow.Odswiez();
        }

    }

Co robię nie tak ? :)

Debugger normalnie wchodzi do tej metody Dodaj, ale nie wykonuje tego co ma ...

1

Wywołujesz

mainWindow.Dodaj(); mainWindow.Odswiez(); 

na rzecz obiektu MainWindow który masz w klasie Okno. W tym obiekcie są dodane przez Ciebie elementy. "Klasa A" nie widzi nowych elementów bo nie dodajesz ich do jej listy, tylko do listy obiektu w klasie Okno.

1

Bo tworzysz nowe mainwindow, a nie odnosisz sie do staregom, musisz przekazać referencje do mainwindow w konstrukorze

 
public Okno(window mainWindow) : this()
   {
        this.oknoGlowne =mainWindow;
   }
0

Dziękuję, doprowadziliście mnie do poprawnego rozwiązania :)

PS. O podstawach programowania obiektowego zdarza się czasem zapomnieć :P

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