Data/Code driven UI mit WPF Teil 2

Slides:



Advertisements
Ähnliche Präsentationen
Mit dieser Methode vergleichen Sie sehr einfach zwei oder mehr Präsentationen Herbert Manthei
Advertisements

Kritische Betrachtung
Seminar Internetdienste Web 2.0 und Rich Internet Applications (RIA) JavaFX Rainer Scholz.
Ein Beispiel in Java.
Konstruktoren.
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
Jürgen-Maria Mustermensch ... sonstiges ...
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Einführung in Java1 Einführung in JAVA.
Abstrakte Klassen, Interface
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Grids - Datenblatt in Visual FoxPro
VFP Class Browser. © 1999 TMN-Systemberatung GmbH Einsatz des Class Browser n Managen von Klassen inklusive, ändern, umbenennen, löschen und umdefinieren.
Lommy® SAFE Individuelles Überwachen von Fahrzeugen und Gütern.
Ich möchte gerne mehrere Bilder auf ein Folie
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 3 Folie 2 Layout (1) Zur Anordnung der Steuerelemente.
Wir bauen uns eine Webapplikation!
Hyperlinks und Anker Links notieren
Silverlight Eine Einführung. Agenda 1.Was ist Silverlight? 2.Die Silverlight Philosophie 3.Vorstellung des Szenarios 4.Einführendes Beispiel 5.Konzepte.
Zum verständlich machen, wozu die Trigger-Funktion geeignet ist,
Gruppe: Gewinnt Überblick 1.0 (Martin Kapfhammer)
Windows Presentation Foundation WS 2013/14 Prof. Dr. Herrad Schmidt
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 8 Folie 2 Commands (1) s.a.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 5 Folie 2 Dependency Properties s.a.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 2 Folie 2 XAML (1) s.a.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 7 Folie 2 Styles (1) s.a.
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 11 Folie 2 Model-View-ViewModel s.a.
1 Bildschirmpräsentation Möglichkeiten, die Präsentation einer Präsentation vorzubereiten und durchzuführen.
Bereit ???? Nimm dir 10 Minuten Zeit. Ich versuche es dir zu erklären.
Jeopardy Günther Reinhold
Aufgaben Version 1: Es soll eine Wetterstation mit folgenden zwei Anzeigen implementiert werden: Aktuelle Wetterbedingungen mit Temperatur und.
Java-AG Benutzeroberflächen Juni 2001 Michael Haas.
Caliburn.Micro.
____________________________________________________________________________________________________________________________________________ Arbeit, Bildung.
Hier eine mögliche Antwort:
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
ExKurs ErschliessZ 1/12 Dr. Barbara Hoffmann LiteraturKompetenz Erschließen: Textzitate Bei der Lektüre wissenschaftlicher Texte sollten Sie.
Java-Kurs Übung Besprechung der Hausaufgabe Vererbung
Institut für Kartographie und Geoinformation Prof. Dr. L. Plümer, Dipl.-Ing. D. Dörschlag, Dr. G. Gröger Einführung in die Programmierung mit Java 13.
Schritt für Schritt-Anleitung
Pool Informatik, Sj 11/12 GZG FN W.Seyboldt 1 Pool Informatik 5 GZG FN Sj. 11/12 Kopieren, Daten, Programme.
Programmiersprachen II Fortsetzung Datenstrukturen Einfache Bäume Übung 13 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Arbeiten mit WordSmith 4. Inhalt 1. Arbeiten mit der Funktion Wortliste (im getaggten Korpus) 1. Arbeiten mit der Funktion Wortliste (im getaggten Korpus)
Tutorium Software-Engineering SS14 Florian Manghofer.
Multiprocessing mit OpenMPI Marius Albath. Vorlesung Betriebssysteme, Was ist OpenMPI Was ist OpenMPI OpenMPI Standard Setup OpenMPI Standard.
Was ist ein HTML-Dokument? - Ein WWW-Dokument, das mit anderen Dokumenten verknüpft ist. - Es kann beinhalten: Text, Bilder, Geräusche, Videos, Animationen,
J. Nürnberger2007 / 081 Tabellenkalkulation (3) Arbeiten mit Formeln am Beispiel von OpenOffice.org Calc.
Anforderungen an die neue Datenstruktur
Lars Tremmel ETH Informatikdienste Managed Services September 2013
ShopZ Anleitung zur Anmeldung
Graphen.
Konstruktoren.
HCS Übung 3 Von: Patrick Denk Oleg Arenz
Das IT - Informationssystem
DISPED für WINDOWS DfW ....wenn`s um Speditionsprogramme geht !
OOP II.
Hexadezimale Darstellung von Zahlen
Data/Code driven UI mit WPF Teil 1
Thema 4: Klassenbibliothek
Webinar 21.Februar :00 Uhr i-views 5.0 Die Smart Data Engine –
1. Die rekursive Datenstruktur Liste 1.5 Das Entwurfsmuster Kompositum
Hilfe Dokumente.
Implementieren von Klassen
Felder in der Informatik
Die Internet-Vergabeplattform der ÖBB
Systemprogramm Time Machine
E-Aufgaben in Stud.IP mit ViPS – erste Schritte –
 Präsentation transkript:

Data/Code driven UI mit WPF Teil 2 Der Bau von eigenen Controls Wolfgang Riedmann wolfgang@riedmann.it Xbase.Future 2018 in Köln

Q & A Kann man das nicht auch mit XAML lösen, ohne eigene Control-Klassen? Sicher geht das, nur meiner Meinung nach weniger elegant und rationell Gäbe es nicht auch eine andere Lösung als die vorgestellte? Sicher gibt es mehrere andere Lösungen, und die vorgestellte muss nicht die beste sein. Wäre die Benamung nicht anders besser? Wenn Ihnen andere Namen für Klassen und Eigenschaften besser gefallen, steht es Ihnen jederzeit frei, beides zu ändern. Können diese Controls nicht auch in XAML-Fenstern verwendet werden? Sicher können Sie das – ich habe das nur in den Beispielen nicht eingebaut Kann ich diese Controls frei verwenden und erweitern? Auf jeden Fall. Sie dürfen sie nur nicht als Grundlage für kommerzielle Controls verwenden, d.h. Sie können sie erweitern, dürfen sie aber nicht verkaufen. Xbase.Future 2018 in Köln

Bau von eigenen Controls in WPF Die WPF-Controls basieren nicht auf Windows-Controls, sondern sind komplett neu und vektororientiert entworfen. Nahezu jedes Control kann andere Controls enthalten! Der Fantasie des Entwicklers sind kaum Grenzen gesetzt. So kann ein Button ohne weiteres ein Grid oder ein StackPanel enthalten, die ihrerseits weitere Controls enthalten können. Wenn Sie mit WPF-Controls erfolgreich arbeiten möchten, vergessen Sie alles, was Sie über die Windows GDI wissen, und lassen Sie Ihrer Fantasie freien Lauf! Xbase.Future 2018 in Köln

WPF und Datenbindung WPF ohne Datenbindung ist möglich, und funktioniert auch sehr gut. Man verschenkt aber sehr viel vom Potential, wenn man auf die Datenbindung verzichtet. Daher sollte man bei der Implementierung eigener Controls die Datenbindung vorsehen. Implementation Datenbindung in XAML: <TextBox Name="Participant" Text="{Binding Model.Participant}"</TextBox> Implementation Datenbindung in Code: oTextBox:SetBinding( TextBox.TextProperty, Binding{ „Model.Participant“ } ) Die Datenbindung ist das Aufwendigste bei der Implementation eigener Controls! Xbase.Future 2018 in Köln

Der ImageTextSelector Dieses Control ist entstanden, weil ich für ein Projekt ein Control gesucht habe, wo Bild und Text kombiniert werden können Xbase.Future 2018 in Köln

Das Control Xbase.Future 2018 in Köln Das Control besteht in Wirklichkeit aus zwei verschiedenen Controls: zum einen aus dem umgebenden Control, das lediglich der Darstellung dient – der ImageTextSelector. Mehr Funktionalität hat das interne Control. Es ist vom Button abgeleitet, und enthält ein Grid. In dessen erster Zeile steckt ein ImageControl, in der zweiten ein TextBlock Xbase.Future 2018 in Köln

Implementierung Datenbindung Um eine Datenbindung implementieren zu können, braucht es eine DependencyProperty. Diese wird als statische Variable in der Klasse hinterlegt und beim Instanzieren des ersten Objektes dieser Klasse im System registriert. Zusätzlich braucht es eine statische Methode in der Klasse, die bei Änderung der Property aufgerufen wird Xbase.Future 2018 in Köln

Besonderheiten Aktionen durch Button-Betätigung oder Menü-Auswahl werden in WPF idealerweise per Command ausgeführt. Der ImageTextSelector läßt die Hinterlegung eines Commands bei Doppelklick zu, z.B. um das Auswahlfenster zu schließen. Im Textfeld des Beispieles wird auch der Text des gerade geklickten Bildes angezeigt. Das passiert durch eine doppelte Bindung: die entsprechende Eigenschaft des ImageTextSelectors ist an eine Property des ViewModels gekoppelt, die dann ihrerseits eine andere Property des ViewModels ändert, an die das Textfeld gebunden ist. Xbase.Future 2018 in Köln

Das TreeViewMenu Xbase.Future 2018 in Köln

Das Control Das TreeViewControl bringt das komplette Layout nach außen schon mit, inklusive Datenbindung. Aber: das TreeViewControl erlaubt keine Zuweisung von verschiedenen Commands zu den einzelnen Items, außerdem ist die Gestaltung der einzelnen Items eingeschränkt. Lösung: man kann eigene Controls as Treeview-Items einsetzen. Xbase.Future 2018 in Köln

Das TreeViewMenuItem Xbase.Future 2018 in Köln Der Inhalt des TreeViewItems („Header“) ist ein Grid, kann aber jedes beliebige ContentControl sein. Damit hat man jeden beliebigen Gestaltungsspielraum (siehe ProduktTreeView). Xbase.Future 2018 in Köln

Wichtig: das Model hinter dem Item Wichtig: ein Command für den Klick auf das Item, dazu die Daten, die wir darstellen wollen. Xbase.Future 2018 in Köln

Befüllung über das ViewModel Der Einfachheit halber habe ich hinter jedem Item dasselbe Command hinterlegt. In einer Realworld-Applikation hat jedes Item sein eigenes Command, möglicherweise geteilt mit anderen Menüitems oder Buttons. Auch hier: der Text wird über eine hin-und-zurück Datenbindung angezeigt. Xbase.Future 2018 in Köln

Event abfangen Xbase.Future 2018 in Köln Auch hier: das MenuItem hat einen Verweis auf das Model (per Datenbindung), aus dem es das Command ausführt (wenn vorhanden), und das Item selber mitgibt. Das Ganze passiert total transparent für die Applikation, die das Control einsetzt. Xbase.Future 2018 in Köln

Die DateTextBox Xbase.Future 2018 in Köln Man kann ganz im Stil von MVVM das Problem mit Fenstern und Messages lösen. Da aber eine Datumsauswahl eine sehr triviale Angelegenheit ist und oft benötigt wird, ist der Bau eines eigenen Controls sehr empfehlenswert Xbase.Future 2018 in Köln

Zwischenschritt: Die CommandTextBox Die CommandTextBox ist ein UserControl, das sich aus einer Textbox und einem dahintergesetzten Button zusammensetzt. Ein Klick auf den Button löst ein per DatenBindung konfigurierbares Command aus. Logischerweise ist auch der Inhalt der TextBox per Datenbindung ansprechbar. Und bei Bedarf kann dieses UserControl jederzeit weitere Eigenschaften erhalten. In der vorgestellten Version wird der Button immer quadratisch dargestellt, eine Höhenänderung des Controls ändert auch die Breite des Buttons Xbase.Future 2018 in Köln

Die DateTextBox Xbase.Future 2018 in Köln Für die DateTextBox nutzen wir die Vererbung von der CommandTextBox, damit müssen wir nicht extra layouten, und auch die Funktionalität wird weitgehend von der CommandTextBox übernommen, nur wird schon standardmäßig ein Command gesetzt, und ein FormatString zugewiesen Xbase.Future 2018 in Köln

Implementierung Xbase.Future 2018 in Köln Von Hand wird die Konvertierung gemacht, zwischen String und Nullable<DateTime>. Ein normaler DateTime-Wert kann nicht null sein!!!! Und bei Betätigung des Buttons wird einfach das Kalender-Fenster aufgerufen. Das passt auf jeden Fall auch für MVVM: wir sind und bleiben hier auf der Ebene des Views, d.h. der Darstellung. Klar könnte man das auch über das ViewModel lösen, das ist aber viel mehr Aufwand und Code. Auch in diesem Fall würde man sehr viel Aufwand sparen, wenn man auch nur für die Buttons eine eigene Klasse definieren würde. Xbase.Future 2018 in Köln

Das wars – Danke für Ihre Aufmerksamkeit! Ich hoffe, Sie können was für ihre eigene Arbeit mitnehmen – und wenn es nur der Vorsatz ist: das mache ich garantiert nicht Xbase.Future 2018 in Köln