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

Odpowiedz Nowy wątek
2013-01-27 13:06
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>.

edytowany 4x, ostatnio: Rev, 2013-01-27 14:17
Model-Widok-Prezenter chodzi o MVC? Bo nie załapałem od razu. - ShookTea 2013-01-27 15:17
Raczej o MVP. - somekind 2013-01-27 15:27
MVP to pochodny wzorzec od MVC - Kretmen 2013-01-27 15:30

Pozostało 580 znaków

2013-01-27 14:18
Rev
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);

edytowany 4x, ostatnio: Rev, 2013-01-27 14:22

Pozostało 580 znaków

2013-01-27 14:45
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.

edytowany 2x, ostatnio: Kretmen, 2013-01-27 14:46

Pozostało 580 znaków

2013-01-27 14:46
Rev
0

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


Pozostało 580 znaków

2013-01-27 14:55
0

Dodałem

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

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

Pozostało 580 znaków

2013-01-27 15:06
Rev
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>>();


Pozostało 580 znaków

2013-01-27 15:24
0

Wszystko działa, dzięki!:)

Pozostało 580 znaków

2013-01-27 15:29
0

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


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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