MVVM Tutorial – Part 2 (Model)

Als erstes wollen wir nun ein Projekt erstellen und uns mit dem Model auseinandersetzen.

Solution Explorer

Solution Explorer

Dazu erstellen wir in Visual Studio eine leere Solution. Das Projekt, welches automatisch
für uns angelegt wurde, löschen wir sofort wieder, sodass die Solution komplett leer ist. Nun erstellen wir ein neues Projekt vom Typ Class Library und nennen dieses Model. Außerdem erstellen wir ein Projekt vom Typ Console Application und nennen dieses ModelOutput. Dies benutzen wir nachher, um einmal kurz zu checken, ob unser Model korrekt erstellt wurde.

Wie in jedem guten Tutorial, beginnen wir auch hier mit Hello World!einer Person Klasse. Folgendes Modell wollen wir mit unserer Implementation abbilden:

Person Model

Klassendiagram

Unsere Person Klasse bekommt folgende Felder:

    public class Person
    {
        public string Name { get; set; }
        public string Street { get; set; }
        public int PostalCode { get; set; }
        public string City { get; set; }

        // ...
    }

Denkt daran, hier auch GetHashCode, Equals und ToString zu implementieren!

Außerdem benötigen wir eine PersonList Klasse, welche uns ein paar Personen erstellt und zur Verfügung stellt. In einer realen Anwendung, wird dies eher eine Verbindung zu einer Datenbank sein, welche uns die Personen aus der Datenbank ausließt.

    public static class PersonList
    {
        public static IList<Person> Persons { get; private set; }

        static PersonList()
        {
            Persons = new List<Person>()
            {
                new Person(){Name = "John Doe",
                    Street = "Onestreet",
                    PostalCode = 12345,
                    City = "Onecity"},
                new Person(){Name = "Jane Doe",
                    Street = "Onestreet",
                    PostalCode = 12345,
                    City = "Onecity"},
                new Person(){Name = "Foo Bar",
                    Street = "Twostreet",
                    PostalCode = 54321,
                    City = "Twocity"}
            };
        }
    }

Das war auch schon unser Model.

Da wir das ganze natürlich auch ausgeben wollen, kommen wir nun zum PersonOutput Projekt. Als erstes fügen wir eine Referenz zu unserem Model Projekt hinzu. Dann schreiben wir ein bisschen Code zur Ausgabe in die Main:

        static void Main(string[] args)
        {
            foreach (var person in PersonList.Persons)
            {
                Console.WriteLine(person);
            }
            Console.ReadKey();
        }

Wenn wir das ganze nun starten (Darauf achten, dass das ModelOutput Projekt gestartet wird), sollte uns folgendes Bild angezeigt werden:

Konsolenfenster

Konsole

Damit sind wir auch schon am Ende von dem 2. Part unseres MVVM Tutorials.
Hier bekommt ihr nochmal die komplette Solution als Download:
MVVMTutorial Solution (Model)

7 Gedanken zu „MVVM Tutorial – Part 2 (Model)

  1. livegix

    Müsste dad nich:

    Console.WriteLine(person.Name + “ “ + person.Street + “ “ + person.PostalCode + “ “ + person.City);
    sein? Sonst gibt das doch nur Model.Person zurück.
    Alternativ for int i bla… person[i].ToString…

  2. Philipp Kühn Beitragsautor

    Console.WriteLine(person);
    funktioniert, da in der Person Klasse ToString() implementiert wurde.
    Schaue dir am besten mal die fertige Solution an, die am Ende dieses Posts verlinkt ist.

  3. Lerando

    Ich führe Dein Tutorial unter VS 2012 aus. Wenn ich allerdings das Projekt „Model“ als Startobjekt benutze, kommt hier die Fehlermeldung
    „Ein Projekt mit dem Ausgabetyp „Klassenbibliothek“ kann nicht direkt gestartet werden. Um das ………“

    Ich muss das Projekt ModelOutput als Startobjekt festlegen.
    Kann es hier evtl. zu schwierigkeiten kommen?

    Grüße Lerando

  4. Philipp Kühn Beitragsautor

    Hallo Lerando,
    wie im Artikel beschrieben, musst du das Projekt „ModelOutput“ starten.
    Der Fehler, der kommt, wenn du versuchst, das „Model“ Projekt zu starten ist so schon korrekt.
    Anstatt in Visual Studio einfach auf das Play Zeichen (oder F5) zu drücken, kannst du auch einen Rechtsklick auf das Projekt machen und darüber ein spezifisches Projekt debuggen ohne, dass es als Startup Project markiert ist.

  5. Eden

    Hi,
    ich lerne mich gerade wegen Arbeitgeberwechsel ins MVVM-Pattern ein und mir ist es ein Rätsel, wie die überladenen Methoden in der Person.cs aufgerufen werden. Da muss scheinbar irgendetwas im Hintergrund passieren, was für mich und dem Debugger nicht ersichtlich ist.

    Könntest du kurz erklären was im Hintergrund abläuft? Ein Auskommentieren von z. B. „public override string ToString() {…}“ lässt nur noch 3 x „PersonList.Person“ ausgeben, dabei rufen wir die Methode nie händisch auf.

    Mir würde allein schon eine Bezeichnung des Mechanismuses bzw. ein Link weiterhelfen.

    Besten Dank
    Eden

  6. Philipp Kühn Beitragsautor

    Hi Eden,
    in diesem Fall (hat noch nichts mit MVVM und DataBinding zu tun), wird die Console.WriteLine(object) Überladung aufgerufen.
    Console.WriteLine(object) ruft nun intern TextWriter.WriteLine(object) auf, welches ToString() auf dem Person Objekt aufruft.
    Siehe
    http://referencesource.microsoft.com/#mscorlib/system/console.cs,17999987f8ff4399
    und
    http://referencesource.microsoft.com/#mscorlib/system/io/textwriter.cs,aedbc5e502007cf7
    Wurde ToString nicht überschrieben, wird ToString() aus der object Klasse aufgerufen, welche als Defaultwert den Namen der Klasse ausgiebt.

    Ich hoffe, ich konnte dir weiterhelfen.

  7. Alexander

    >> Console.WriteLine(object) ruft nun intern TextWriter.WriteLine(object) auf, welches ToString() auf dem Person Objekt aufruft.

    Für Lehrzwecke ist es besser, wenn man das .ToString() direkt hinschreibt.
    Also: Console.WriteLine(person.ToString());
    Ein Anfänger sieht den Mechanismus hier tatsächlich nicht. Und auch der Profi muss erst nachsehen, was im Hintergrund passiert (oder halt glücklich raten). Das angefügte .ToString() hat zudem den Vorteil, dass man, wenn man mit dem Cursor draufsteht, mittels der Taste F12 direkt zur Definition gelangt. Win-Win Situation für alle!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.