Model-Widok-Prezenter. Odwołanie do List<> w modelu.

0

Witam
Mam następujący problem, nie wiem jak się odwołać do listy w modelu.

struktura programu:

folder: model: klasa: PointCoordinate.cs
ModelContainer.cs

folder: prezenter: form: Form1

PointCoordinate:

 public class PointCoordinate
    {
        public int Type { get; set; }
        public float x { get; set; }
        public float y { get; set; }
    }

ModelContainer:

 public class ModelContainer
    {
        public List<List<PointCoordinate>> ElementsList { get; set; }

        public ModelContainer()
        {
            List<List<PointCoordinate>> ElementsList = new List<List<PointCoordinate>>();
        }
    }

W formie 1 chce dodawać współrzędne punktów do ElementsList.
Próbowałem w ten sposób, do form 1 wrzuciłem:

private ModelContainer Container = new ModelContainer();  
Container.ElementsList[Container.ElementsList.Count].Add(new PointCoordinate() { Type = 1, x = e.X, y = e.Y });

tylko wywala błędy i nie wiem za bardzo jak to rozwiązać.

Rev: kod zamykaj w znacznikach <code>. W tym przypadku <code><code class="csharp">kod</code></code>.

1

Jaki błąd? ZAWSZE podawaj treść błędu.

Container.ElementsList[Container.ElementsList.Count]
W kolekcjach, gdzie indeksowanie zaczyna się od zera ostatnim elementem jest ilość elementów - 1.

Ponadto, stworzenie listy list nie powoduje, że stworzą się wszystkie listy w tej liście. Przed dodaniem konkretnych elementów musisz je najpierw utworzyć za pomocą new.

var l = new List<List<int>>();
l.Add(new List<int>());
l[0].Add(50);
0

Błąd jest następujący:
Wyjątek NullReferenceException
{"Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu."}

Rzeczywiście miało być -1, z rozpędu zapomniałem dodaj:) Co nie zmienia faktu, że form1 "nie widzi" tej listy list.

Wcześniej miałem tą liste w formie1

public List<List<PointCoordinate>> ElementsList = new List<List<PointCoordinate>>(); 

i dodawałem w zdarzeniu mouse_click element do listy

  ListaElementow[KtoryElement].Add(new xy(){Type=1, x=(float)aktualne_x, y = (float)aktualne_y });

i wszystko działało ale niestety muszę oddzielić model.

0

Ponownie - przed dodaniem pierwszego elementu do listy wewnętrznej musisz ją najpierw dodać do listy zewnętrznej.

0

Dodałem

Container.ElementsList.Add(new List<PointCoordinate>());

i ten sam błąd, tylko teraz do tego.

2

W konstruktorze ModelContainer tworzysz tak naprawdę zmienną lokalną przykrywając pole.

List<List<PointCoordinate>> ElementsList = new List<List<PointCoordinate>>(); -> ElementsList = new List<List<PointCoordinate>>();

0

Wszystko działa, dzięki!:)

0

Tylko gdzie tu ten tytułowy Model-Widok-Prezenter?

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