Donnerstag, 23. September 2010

Windows Phone 7 Webcasts






Microsoft hat eine neue Webcast-Serie zum Thema Windows Phone 7 veröffentlicht. Die Webcasts werden von Max Knor vorgestellt. Die Serie teilt sich in die folgenden Bereiche auf:

  • Plattform Übersicht
  • Silverlight auf Windows Phone 7
  • Grundlagen der Architektur
  • Model-View-ViewModel
  • Aktivierung und Deaktivierung von Applikationen
  • Seiten-Navigation in Silverlight


Freitag, 23. Juli 2010

Data binding im ViewModel ohne INotifyPropertyChanged

Immer wieder wird viel darüber diskutiert, wie man am besten Änderungen von Eigenschaften der  Oberfläche mitteilt. Normalerweise geht das nur über INotifyPropertyChanged oder über Dependency Properties.

Normalerweise sind beide Wege ja auch kein Problem und einfach zu realisieren. Es gibt natürlich Unterschiede was Aufwand und Performance angeht. Das muß dann jeweils im Anwendungsfall entschieden werden, welches das bessere Vorgehen ist.

Nun gibt es aber auch eine ganz andere Lösung, die auf INotifyPropertyChanged und Dependency Properties komplett verzichtet:

   Update Controls .NET

Dabei wird wohl ein Wrapper verwendet, der dann für alle Eigenschaften des eigenen Objektes die Schnittstelle INotifyPropertyChanged implementiert. Darüber hinaus soll auch automatisch die Abhängigkeiten zwischen Eigenschaften erkannt werden.

Das alles wird auch in Videos erklärt.

Montag, 14. Juni 2010

ViewModel (MVVM) Frameworks

Regelmäßig stellt sich uns die Frage, bauen wir unser eigenes ViewModel-Framework weiter aus, oder steigen wir auf eines der Open Source Application Frameworks um. Da wir sowohl in WPF als auch in Silverlight entwickeln (Windows Phone 7 nicht vergessen!), möchten wir gerne die gleiche Basis auf allen Plattformen verwenden. Das wird nur von MVVM Light unterstützt. Caliburn läuft immerhin unter WPF und Silverlight, ist auch das umfangreichste Framework. Allerdings auch mit dem größten Einarbeitungsaufwand und zum Teil eigenwilligen Syntax im XAML.

Um mal einen Überglick zu bekommen, haben wir hier die wesentlichen Unterschiede mal zusammengefasst. Was sich in PRISM bezüglich MVVM verändern bzw. entwickelt wird, muß man noch abwarten.

MVVM Foundation
  • Unterstützt nur WPF
  • ViewModel Basisklasse mit Runtime Property-Namen Checks
  • Einfache ICommand Implementierungen: CommandViewModel, RelayCommand (auch bekannt als DelegateCommand)
  • PropertyObserver: Überwacht PropertyChanges eines VM, Property wird als Lambda übergeben -> Compiletime Prüfung, ob Property existiert
  • Mediator: Lose gekoppelte Kommunikation zwischen ViewModels, müssen nur Mediator kennen, aber nicht beteiligte VMs
  • Keine Funktionen für Nebenläufigkeit
Cinch
  • Unterstützt nur WPF
  • Einfache ViewModel und Command Basisklassen
  • Über Atttached Behavior kriegt VM Lebenszyklen eines Views mit (Activated, Loaded etc.) ohne ihn kennen zu müssen
  • NumericTextBoxBehavior
  • Commands können im XAML an RoutedEvents gebunden werden
  • Generischer Editable Wrapper für Model und ViewModel, hält States synchron. Auch eigene Implementierung von IEditableObject
  • Validierung für Model-Eigenschaften mit definierbaren Regeln, Standard IDataErrorInfo Interface Implementierung
  • WeakEvents
  • Mediator Pattern (siehe MVVM Foundation)
  • Unterstützt IoC Container (default: Unity), konfigurierbar via App.config
  • Diverse Standardservices wie MessageBox, Save file etc. Unterstützen Unittests
  • App.DoEvents() implementierung
  • UI-Element Focus Helper
  • Recht gute und umfangreiche Beispiele auf Codeproject
  • Nebenläufigkeit:

    • Dispatcher Helper für die Ausführung im UI Thread
    • Definiert einige Extension Methoden für die Dispatcher Klasse (im Dispatcher, im Hintergrund, asynchron ausführen)
    • Generische BackgroundTaskManager Klasse. Führt Code asynchron aus und ruft dann mit dem Ergebnis einen Completed Handler im UI Thread auf. Sehr einfache Verwendung
MVVM Light
  • Unterstützt WPF, Silverlight und Windows Phone 7
  • Einfache ViewModel und Command Basisklassen
  • Messenger (Mediator Pattern, siehe oben)
  • Events to Command Binding
  • Nebenläufigkeit: DispatcherHelper Klasse mit einer einfachen Hilfsmethode die Code im UI Dispatcher ausführt
Caliburn
  • Unterstützt WPF und Silverlight
  • Verwendet im XAML viel eigene Non-Standard Syntax und Konventionen. Mächtiger als Standard-Bindings, aber höherer Lernaufwand
  • Konventionen, Benennungsschemen (Namespaces, Klassennamen etc.) sind API relevant für Autogenerierung/-finden von Views und ViewModels durchs Framework, Verhalten aber änderbar
  • Viele Standard-Klassen implementieren keine spezifischen Schnittstellen, weisen sich nur durch Methoden aus
  • Eigener DI Container, überschreibbar
  • Bringt Standardimplementierungen von Commands und ViewModels mit
  • Komplett eigene Application Management Klassen, großer Umfang
  • Vermutlich viel Reflection um automatisch Klassen und Methoden zu finden, ist unter Umständen performancekritisch
  • Actions, eine Art erweiterte Converter/Binding/Commanding/VM Mechanik fürs XAML
  • ResolveExtension: Im XAML deklariert, holt Objekte aus dem DI Container
  • Doku/Tutorials für den enormen Umfang auf der offiziellen Seite recht knapp
  • Nebenläufigkeit:

    • Threading Helper
    • Methoden in Actions (ähnlich zu Command Methoden) können mit Attribut als asynchron markiert werden
    • Gebundenes UI Element wird optional disabled während Code asynchron ausgeführt wird
    • Ergebnis einer async. Action wird automatisch fürs DataBinding in den UI Thread überführt
    • Es kann optional ein Completed Callback angegeben werden

Montag, 17. Mai 2010

Top Ten Lies of Web 2.0

I read the article The Top 10 Lies of Web 2.0 from Dan Fost at SFGate.com and found it very compelling to morph it into a slideshow. So that is what I did ...

Montag, 5. April 2010

How to use ASP.NET MVC in combination with ADO.NET Entity Framework

As mentioned in a previous post I am currently working on a web application that we are building on top of the ASP.NET MVC Framework. The framework allows for a very clean implementation of the MVC pattern.

Because there is a database behind the application we decided to use the ADO.NET Entity Framework to access this database with help from model classes. The Entity Framework is a modeling framework that enables developers to define a conceptual model of a database schema that closely aligns to a real world view of the information. Benefits include easier to understand and easier to maintain application code that is shielded from underlying database schema changes.

In theory this all makes perfectly sense, but you have to implement it as well. There are two resources that I want to pass on because they were an incredible help to us.

The first is the tutorial Creating Model Classes with the Entity Framework on www.asp.net. The goal of this tutorial is to explain how you can create data access classes using the Entity Framework when building an ASP.NET MVC application. This tutorial assumes no previous knowledge of the Entity Framework. By the end of this tutorial, you’ll understand how to use the Entity Framework to select, insert, update, and delete database records. And in my opinion this tutorial meets its goal.

The second is a sample application written by Brad Abrams and Lance Olson. You will find a link to the sample and a description in his article ASP.NET MVC Example Application over Northwind with the Entity Framework. The sample application is a little outdated, but still an excellent reference point.

Related Posts:

Sonntag, 4. April 2010

How to use ASP.NET MVC in SharePoint

Currently I am working on a web application that we are building on top of the ASP.NET MVC Framework. The framework is pretty impressive and allows for a very clean implementation of the MVC pattern.

As some of you know I do some SharePoint development as well, and I decided to try to run an application developed with ASP.NET MVC within SharePoint.

Why I want to do this? Because we could leverage all strong points of ASP.NET MVC like separation of concerns, testability, clean HTML together with the huge foundation that SharePoint offers. I am definitely not the first who wanted to do this, so help was allready on it's way.

SharePointMVC from Simon Cropp which is available for download on CodePlex is a great start for getting your ASP.NET MVC application to run in SharePoint.

Here is how it works:
  1. A SharePoint Master Page contains all SharePoint styles and theme
  2. A custom ASP.net page (MVCHostingPage) is based upon the SharePoint Master Page
  3. MVCHostingPage contains a web control called RenderControl
  4. RenderControl (and other internal classes) interrogates the current request and forwards it onto the ASP.NET MVC rendering engine.
  5. A HttpHandler takes all requests to *.mvc and redirects them to the MvcHostingPage.aspx page.