none
C# WPF Application - Grundlegende Programmstruktur für fortgeschrittene Programme

    Frage

  • Hallo zusammen,

    ich bin relativ neu im Bereich C# und komme eher aus der LabVIEW Programmierung. Derzeit versuche ich mir die notwendigen Grundlagen zu erarbeiten, wobei ich weniger Probleme mit C# Programmiergrundlagen habe, als mit dem Aufbau der Programmstruktur einer Desktopapplikation in Visual Studio.

    Was ich gerne machen würde, wäre mir eine Art einfaches Framework anhand eines simplen Beispieles aufzubauen. Bei LabVIEW waren das damals Producer/Consumer-Patterns oder der Queued Message Handler. Damit kann man dann auf einfache Art ein kleines Framework erstellen, das "alle möglichen" Aufgaben eines kleinen Programms erledigt, und man kann diese Anwendung dann relativ leicht erweitern.

    In Visual Studio habe ich mir zu Beginn das Schema MVC ausgeguckt. Das Konzept habe ich soweit verstanden, allerdings hapert es an der Anwendung in einem WPF Projekt. Daraufhin habe ich das Internet durchforstet, aber denke, dass ich einfach zu doof bin. Entweder gibt es nur Einführungen in das WPF Design, Beispiele für einfache WPF-Hallo-Welt-Anwendungen oder MVC Anleitungen für ASP.Net Webapplikationen.

    Probleme habe ich vor allem bei:

    - der Umsetzung der Kommunikation der einzelnen Module (View-Klasse, Controller-Klasse und Model-Klasse) in der Praxis

    - der Frage, welche Klasse dann die Hauptausführende ist (also quasi die main() beherbergt)

    - der Frage, ob man das MainWindow irgendwo instanziieren sollte (in meinem Verständnis wäre das MainWindow dann die View-Klasse und müsste in einer anderen Controller-Klasse als Objekt erzeugt werden)

    Die erfahrenen Programmierer werden bei den Fragen bestimmt die Nase rümpfen, weil diese Fragen bestimmt total dumm sind und wahrscheinlich gar keinen Sinn ergeben. Allerdings hoffe ich, dass ich vermitteln konnte, welches Problem ich habe und vielleicht kann mir jemand einen Suchbegriff, Anlaufpunkt, Tutorial oder ein Beispiel verlinken, dass mir weiterhelfen kann. Wichtig ist mir vor allem, dass mir gezeigt wird, wie das Ganze im Zusammenspiel mit Visual Studio umzusetzen ist.

    Danke für das Verständnis und die Geduld diesen ellenlangen Text durchzulesen. Und danke für alle Tipps im Voraus!

    Gruß

    Jensolo

    Donnerstag, 8. März 2018 16:35

Antworten

  • Hallo Jensolo,

    bei WPF ist es üblich das MVVM Pattern zu benutzen. Das Thema ist recht komplex sodass man es nicht so einfach mal erklären kann. Du wirst aber sehr viele Beispiele finden wenn Du nach "wpf mvvm" suchst. Schau dir diese einfach mal an und komme wieder wenn Du etwas nicht versanden hast


    Gruß Thomas
    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!
    Dev Apps von mir: Icon für UWP,  UI Strings
    Andere Dev Apps: UWP Community Toolkit Sample App

    Donnerstag, 8. März 2018 17:15
  • So schwer ist das Pattern nicht nur etwas gewöhnungsbedürftig wie jedes andere auch. Am einfachsten ist WPF mit MVVM auch wenn man etwas mehr lernen muss lohnt sich der Aufwand. MVVM basiert auf MVC nur das der Controler durch das ViewModel ersetzt wird und etwas andere aufgaben hat

    Gruß Thomas
    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!
    Dev Apps von mir: Icon für UWP,  UI Strings
    Andere Dev Apps: UWP Community Toolkit Sample App

    Donnerstag, 8. März 2018 17:28

Alle Antworten

  • Hallo Jensolo,

    bei WPF ist es üblich das MVVM Pattern zu benutzen. Das Thema ist recht komplex sodass man es nicht so einfach mal erklären kann. Du wirst aber sehr viele Beispiele finden wenn Du nach "wpf mvvm" suchst. Schau dir diese einfach mal an und komme wieder wenn Du etwas nicht versanden hast


    Gruß Thomas
    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!
    Dev Apps von mir: Icon für UWP,  UI Strings
    Andere Dev Apps: UWP Community Toolkit Sample App

    Donnerstag, 8. März 2018 17:15
  • Super, vielen Dank! Dann werde ich meine Fühler mal in diese Richtung ausstrecken. Gibt es vielleicht noch ein anderes Pattern, dass leichter zum Einsteigen ist, nach dem ich auch suchen kann?

    Danke nochmal!

    Donnerstag, 8. März 2018 17:19
  • So schwer ist das Pattern nicht nur etwas gewöhnungsbedürftig wie jedes andere auch. Am einfachsten ist WPF mit MVVM auch wenn man etwas mehr lernen muss lohnt sich der Aufwand. MVVM basiert auf MVC nur das der Controler durch das ViewModel ersetzt wird und etwas andere aufgaben hat

    Gruß Thomas
    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!
    Dev Apps von mir: Icon für UWP,  UI Strings
    Andere Dev Apps: UWP Community Toolkit Sample App

    Donnerstag, 8. März 2018 17:28
  • Ich persönlich finde das MVVM-Pattern einfacher anzuwenden als das MVC-Pattern. Die Grundlagen hierfür:

    Model
    Diese Klasse stellt die Daten für die Darstellung auf der WPF-View und ggfs. Geschäftslogik zur Verfügung. Für spätere Erweiterbarkeit (z.B. in Richtung PRISM/MEF) ist es ratsam, die Model-Daten per Interface bereitzustellen (Stairway to Heaven-Pattern).

    ViewModel
    In dieser Klasse werden die Daten des Models gewrappt. Essentiell hierbei ist, dass die ViewModel das INotifyPropertyChanged-Interface implementiert. Alle Daten, die auf der View dargestellt werden, müssen dann per NotifyPropertyChanged()-Event eine Änderungsbenachrichtigung für die Oberfläche bereitstellen. Der .net-interne Datenbindungs-Mechanismus sorgt dann automatisch für die Änderung auf der Oberfläche (es entfällt also der händische Glue-Code zum Befüllen der Daten auf der View und das Reagieren auf Datenänderungen).
    Weiterhin stellt das ViewModel Kommandos bereit, die von der Oberfläche ausgelöst werden können (Implementierung von ICommand).

    View
    Die View ist schließlich die WPF-Oberfläche, die per XAML-Code beschrieben ist. Im Code finden sich bei den Formularfeldern (z.B. Textboxen) die Datenbindung an die Model-Eigenschaften im ViewModel. Auch befinden sich hier Kommandobindungen an die ICommands im ViewModel, um bestimmte Funktionalität aufrufen zu können.

    Simples Beispiel für eine WPF-Anwendung

    VS-Projektvorlage: Klassischer Desktop -> WPF-App

    Der Einstiegspunkt findet sich in in der Codebehind der App.xaml (App.xaml.cs).
    Hier kann man die Methode OnStartup() überschreiben. Die Zeile mit "StartupUri" sollte aus der App.xaml entfernt werden.

    protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); IModel model = new MyModel(); // Model per Konstruktor ins ViewModel reichen MyViewModel viewModel = new MyViewModel(model); MyView view = new MyView(); MyView.DataContext = viewModel; view.ShowDialog();

    Application.Current.Shutdown(); }


    Soweit von mir eine "kurze" Zusammenfassung zum Thema MVVM. Hierzu gibt es viele Quellen mit Tutorials. Es lohnt sich wirklich, MVVM in der WPF anzuwenden. Nach gewisser Einarbeitungszeit möchte man es nicht mehr missen.

    VG Wolfgang


    • Bearbeitet wdallmeyer Donnerstag, 15. März 2018 08:31
    Donnerstag, 15. März 2018 07:49