In .NET MAUI, wenn ein Steuerungselement ein Kind eines Grids ist, werden dessen Grid.Row und Grid.Column standardmäßig auf 0 gesetzt. Das bedeutet, dass etwa ein Label für die Kunden-ID keine explizite Positionierung benötigt, und für andere Steuerelemente, wie das Eingabefeld für die Kunden-ID, reicht es aus, nur die Spalte anzugeben. Diese automatische Positionierung erleichtert das Layout und reduziert redundanten Code.
Die Klasse CustomerDetailPage.cs dient als Beispiel für die Implementierung der MVVM-Architektur in einer MAUI-Anwendung. Hier wird gezeigt, wie das ViewModel als BindingContext gesetzt wird, was eine zentrale Rolle bei der Datenbindung und der Trennung von UI und Logik spielt. Die Klasse verfügt über zwei Konstruktoren: Der erste erzeugt eine neue Instanz des CustomerDetailViewModel und setzt den Seitentitel auf „Add Customer“, um einen neuen Kunden anzulegen. Der zweite Konstruktor übernimmt ein bestehendes CustomerDetailViewModel-Objekt und blendet die Einfüge-Schaltfläche aus, da beim Bearbeiten eines bestehenden Kunden keine neue Erstellung nötig ist. Diese Konstruktion unterstützt Zwei-Wege-Datenbindung, sodass Änderungen im UI direkt im ViewModel reflektiert werden.
Das Ereignis InsertButton_Clicked ist asynchron und fügt bei Betätigung den neuen Kunden dem Kundenliste-ViewModel hinzu. Anschließend erfolgt eine Navigation zurück zur vorherigen Seite, was eine intuitive Nutzerführung gewährleistet. Bemerkenswert ist, dass der Standardkonstruktor entfernt wurde, um sicherzustellen, dass die Seite nur mit den benötigten Parametern initialisiert werden kann, was die Robustheit der Anwendung verbessert.
Im Android-spezifischen Kontext muss die AndroidManifest.xml angepasst werden, um Telefoniefunktionalitäten freizuschalten. Die App erlaubt dann, über die UI Kunden anzurufen. Dies wird in der Android-Emulator-Umgebung getestet, wobei der Emulator nicht nur die App ausführt, sondern auch das native Telefonwählfeld simuliert. Der Ablauf zeigt, wie ein Kunde aus der Liste ausgewählt, dessen Telefonnummer angewählt wird, und wie die native Telefonanwendung geöffnet wird.
Weiterhin illustriert das Beispiel, wie Kundeninformationen bearbeitet, hinzugefügt und gelöscht werden können. Durch die Zwei-Wege-Bindung aktualisieren sich Änderungen sofort in der UI, was eine konsistente und reaktive Benutzererfahrung ermöglicht. Ein weiteres UI-Feature ist das „Pull-to-Refresh“-Verhalten, das in der Demo zwar animiert, aber noch nicht funktional ist – eine übliche UX-Verbesserung, die sich leicht in echte Datenaktualisierung integrieren lässt.
Ein wichtiges Thema ist die Kommunikation mit Webdiensten, die für mobile Apps essenziell ist. Apple und Google fordern, dass Verbindungen zu Web-APIs sicher sind (z. B. mittels HTTPS), was mit App Transport Security (ATS) und ähnlichen Mechanismen durchgesetzt wird. Bei selbstsignierten Zertifikaten, wie in manchen Entwicklungsumgebungen üblich, kann dies zu Problemen führen. In der Demonstration wird daher temporär die Sicherheitsprüfung deaktiviert, um den Zugriff auf den Webservice zu ermöglichen. Dies ist jedoch nur für Entwicklungszwecke ratsam.
Wesentlich für das Verständnis ist, dass .NET MAUI eine Brücke zwischen plattformübergreifender UI und nativer Funktionalität schlägt, indem es sowohl MVVM-Prinzipien als auch plattformspezifische Anpassungen ermöglicht. Der Nutzer sieht dabei eine einheitliche Oberfläche, während im Hintergrund je nach Plattform spezifische Rechte, Ressourcen und Funktionen genutzt werden. Die Trennung der ViewModels von der UI und die Nutzung von asynchronen Methoden für Navigation und Datenmanipulation sind Kernbestandteile, die eine moderne, performante und wartbare mobile Anwendung gewährleisten.
Zusätzlich zur reinen Umsetzung sollte der Leser den Fokus auf Architektur und Sicherheit legen. Insbesondere die Bedeutung von Datenbindung, die asynchrone Programmierung in UI-Kontexten und die Handhabung von plattformspezifischen Berechtigungen sind entscheidend. Ebenso wichtig ist die Fähigkeit, mit Webservices sicher zu kommunizieren, insbesondere im Hinblick auf Zertifikatsmanagement und Netzwerkprotokolle. Nur so lassen sich sowohl Entwicklungszeit reduzieren als auch eine hohe Nutzerzufriedenheit erzielen.
Wie arbeitet man effizient mit T-SQL zur Verwaltung relationaler Daten?
Transact-SQL (T-SQL) stellt eine leistungsfähige Erweiterung von SQL dar, die speziell für Microsoft SQL Server entwickelt wurde. Die Arbeit mit Variablen beginnt mit ihrer Deklaration und Zuweisung. So kann etwa eine Variable mit einem numerischen Wert initialisiert und anschließend inkrementiert werden. Ein Beispiel: SET @WholeNumber = 3; gefolgt von SET @WholeNumber = @WholeNumber + 1;. Im weiteren Verlauf kann dieser Wert durch das Ergebnis einer Abfrage ersetzt werden, wie SELECT @WholeNumber = COUNT(*) FROM Employees; oder durch den konkreten Wert einer Spalte gefiltert nach Bedingungen, z. B. SELECT @WholeNumber = EmployeeId FROM Employees WHERE FirstName = 'Janet';.
Globale Variablen, die den Kontext einer aktuellen Sitzung widerspiegeln, beginnen mit @@, wie @@ROWCOUNT, das die Anzahl der von der letzten Anweisung betroffenen Zeilen zurückgibt. Derartige Mechanismen ermöglichen die Entwicklung dynamischer, zustandsbewusster Datenmanipulationen in T-SQL.
Die Wahl geeigneter Datentypen hat unmittelbaren Einfluss auf die Effizienz und Speicherökonomie. Ein int belegt vier Bytes, ein smallint zwei und ein tinyint lediglich ein Byte. Text- und binäre Datentypen lassen sich flexibel über varchar(n) oder nvarchar(n) definieren. Die Präfixe var und nvar kennzeichnen dynamische Längenanpassung, während char(n) eine feste Länge zuweist. Der n-Präfix steht für Unicode-Unterstützung, was zu einem doppelten Speicherbedarf pro Zeichen führt.
Für die Steuerung des Programmflusses stehen in T-SQL Konstrukte zur Verfügung, die C# ähneln: IF...ELSE, CASE, WHILE, TRY...CATCH, BREAK, CONTINUE und RETURN. Blöcke werden durch BEGIN und END gekapselt, was der geschweiften Klammernotation in C# entspricht.
T-SQL unterstützt gängige Operatoren zur Wertzuweisung und -vergleiche, wie =, +, -, *, /, %, <, >, <=, !=. Darüber hinaus stehen logische Operatoren (AND, OR, NOT) sowie Mengenoperatoren wie ANY, ALL, SOME, EXISTS, BETWEEN und IN zur Verfügung. Die Zeichenmustererkennung erfolgt über LIKE, wobei % für eine beliebige Anzahl Zeichen und _ für ein einzelnes Zeichen steht. Zeichenbereiche lassen sich mit [] definieren.
Bezeichner mit Leerzeichen müssen in eckige Klammern ([Order Details]) oder doppelte Anführungszeichen ("Order Details") gesetzt werden, während einfache Anführungszeichen der Kennzeichnung von Textliteralen dienen ('USA').
Die Data Manipulation Language (DML) erlaubt sowohl das Abfragen als auch das Ändern von Daten. Die SELECT-Anweisung ist hierbei besonders zentral und zugleich komplex. Erste Ansätze reichen vom Abruf aller Spalten (SELECT * FROM Employees) über das Filtern von Datensätzen (SELECT FirstName, LastName FROM Employees WHERE Country = 'USA') bis hin zu Aggregatfunktionen mit Gruppierung (SELECT OrderId, SUM(UnitPrice * Quantity) AS Total FROM [Order Details] GROUP BY OrderId ORDER BY Total DESC). Kartesische Joins (FROM Categories, Products) werden durch INNER JOINs kontrolliert (FROM Categories c INNER JOIN Products p ON c.CategoryId = p.CategoryId), um sinnvolle Relationen herzustellen.
INSERT, UPDATE und DELETE stellen die klassischen DML-Befehle zur Änderung von Daten dar. Neue Datensätze werden mit INSERT eingefügt, bestehende mit UPDATE verändert, etwa UPDATE Employees SET Country = 'UK' WHERE FirstName = 'Mark' AND LastName = 'Price'. Das Löschen erfolgt entweder selektiv (DELETE Employees WHERE ...) oder vollständig. TRUNCATE TABLE ist dabei eine effizientere Variante, da keine Protokollierung einzelner Zeilen erfolgt, jedoch restriktiver hinsichtlich referenzieller Integrität.
Strukturelle Änderungen der Datenbank fallen in den Bereich der Data Definition Language (DDL). Tabellen werden mit CREATE TABLE erstellt, z. B. CREATE TABLE dbo.Shippers (ShipperId INT PRIMARY KEY CLUSTERED, CompanyName NVARCHAR(40)). Bestehende Strukturen lassen sich mit ALTER TABLE erweitern oder mit DROP TABLE entfernen. Die Existenz von Objekten lässt sich über IF OBJECT_ID(...) IS NOT NULL prüfen, wobei der Unicode-Präfix N für Literalwerte erforderlich ist.
Auf Anwendungsebene ermöglicht Microsoft.Data.SqlClient die Anbindung von .NET-Applikationen an SQL Server. Diese Low-Level-API, früher bekannt als ADO.NET, ist für .NET Framework (ab Version 4.6.2), .NET Core (ab 3.1) sowie .NET Standard (ab 2.0) geeignet. Die zentralen Abstraktionen wie DbConnection, DbCommand und DbDataReader d
Wie man saisonale Heißgetränke im Slow Cooker zubereitet: Rezepte für jede Jahreszeit
Wie die kreativen Spannungen und das Chaos die Entstehung von Bowies "Station to Station" prägten
Wie können Eltern durch gezielte Kommunikation Konflikte mit Kindern vermeiden und Ehrlichkeit fördern?
Wie politische Kampagnen die private Gesundheit und den Glauben von John F. Kennedy beeinflussten

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский