Sep 11

Eingabevalidierung in Avalonia mit INotifyDataErrorInfo

In den letzten Wochen habe ich mich wieder stärker mit der GUI im Projekt MessageCommunicator [1] beschäftigt. Diese ist hier komplett in Avalonia implementiert und damit ist die Anwendung für Windows, Linux und MacOS verfügbar. Neben einigen Styling-Anpassungen (Wechsel Light/Dark-Theme) habe ich auch eine Datenvalidierung mithilfe der auch in WPF beliebten INotifyDataErrorInfo Schnittstelle integriert. Diese Schnittstelle arbeitet ähnlich wie INotifyPropertyChanged und ermöglicht, asynchron je gebundener Eigenschaft Fehler an die GUI zu melden.

Weiterlesen
Aug 03

PropertyGrid mit Avalonia

Leider beinhaltet Avalonia selbst kein PropertyGrid. Eine kleine, eigene Implementierung ist aber zum Glück auch nicht so aufwändig wie es zunächst klingt. In meinem OpenSource-Projekt MessageCommunicator [1] bin ich genau diesen Weg gegangen. Gerne kann diese Implementierung auch als Vorlage für andere oder ggf. einem eigenen OpenSource-Projekt speziell für das PropertyGrid vergleichbar zu PropertyTools [2] für WPF dienen.

Weiterlesen
Jul 27

Cross-Plattform GUI mit C# und Avalonia

Es existieren einige Ansätze, um mit C# gleichzeitig für mehrere Plattformen eine GUI zu entwickeln. Xamarin.Forms etwa ist hier ein sehr bekanntes Beispiel. Etwas unbekannter ist das Framework Avalonia [1]. Hierbei handelt es sich ebenfalls um ein Framework, bei dem die Oberflächen mit Xaml beschrieben und mittels des MVVM-Patterns mit der C#-Logik gekoppelt werden können. Anders als Xamarin.Forms setzt Avalonia auf einen komplett eigenen Rendering-Stack und nicht auf die Standard-Steuerelemente des jeweiligen Betriebssystems. Dadurch ist Optik und Verhalten der Applikationen auf allen Plattformen maximal gleich. Ich persönlich finde diesen Ansatz schon länger sehr spannend und habe mich in den letzten Monaten mehr mit Avalonia beschäftigt. Um für das Framework ein Gefühlt zu bekommen, habe ich eine kleine Applikation zum Senden/Empfangen von TCP/IP-Nachrichten damit gebaut [2]. Das Vorschaubild dieses Artikels ist ein Screenshot dieser Applikation.

Weiterlesen