Neue Ideen für MVVM Pattern

Erno de Weerd, hat einen neuen Ansatz des MVVM Patterns in seinem Blog infoSupport beschrieben. Hier wird mit Hilfe von Reflections eine Implementierung geschaffen die flexibler und robuster auf Veränderungen des Views und des Models reagiert und somit für den Entwickler Zeit spart.

using System;
using System.ComponentModel;
using System.Linq.Expressions;
using System.Reflection;
using System.Windows;

namespace MVVM
{
public class ViewModelBase<T> : INotifyPropertyChanged
{
public App Application
{
get
{
return App.Current as App;
}
}

#region INotifyPropertyChanged Implementation
public event PropertyChangedEventHandler PropertyChanged;

protected void NotifyPropertyChanged<TProperty>(
Expression<Func<T, TProperty>> propertyExpression)
{
MemberExpression memberExpression = propertyExpression.Body
as System.Linq.Expressions.MemberExpression;
if (memberExpression == null || (memberExpression != null &&
memberExpression.Member.MemberType != MemberTypes.Property))
{
throw new ArgumentException(
„The specified expression does not represent a valid property“);
}
OnPropertyChanged(memberExpression.Member.Name);
}

protected void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler p = PropertyChanged;
if (p != null)
{
p(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
}

Abb.: Base Class für das ViewModel

Sprachen unabhängig zu sein hat bei der App Entwicklung einen Marktentscheidenen Vorteil und ist rechtzeitig mit einzuplanen bei der Entwicklung.

using System;
using System.ComponentModel;
using System.Linq.Expressions;
using System.Reflection;
using System.Windows;

namespace MVVM
{
public class ViewModelBase<T> : INotifyPropertyChanged
{
private static Example.Resources.Cultures.AppResources _uiTexts = new Resources.Cultures.AppResources();

public Example.Resources.Cultures.AppResources UITexts
{
get
{
return _uiTexts;
}
}

public void ChangeLanguage(string language)
{
Example.Resources.Cultures.AppResources.Culture = new System.Globalization.CultureInfo(language);
OnPropertyChanged(„UITexts“);
}

public App Application
{
get
{
return App.Current as App;
}
}

#region INotifyPropertyChanged Implementation
public event PropertyChangedEventHandler PropertyChanged;

protected void NotifyPropertyChanged<TProperty>(
Expression<Func<T, TProperty>> propertyExpression)
{
MemberExpression memberExpression = propertyExpression.Body
as System.Linq.Expressions.MemberExpression;
if (memberExpression == null || (memberExpression != null &&
memberExpression.Member.MemberType != MemberTypes.Property))
{
throw new ArgumentException(
„The specified expression does not represent a valid property“);
}
OnPropertyChanged(memberExpression.Member.Name);
}

protected void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler p = PropertyChanged;
if (p != null)
{
p(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
}

Abb.: Ressourcen Handles

Und so einfach ist der Einsatz im XAML:

<TextBlock x:Name=“PageTitle“
Text=“{Binding UITexts.LocationsHeader}“ />

Quelle:

Windows Phone 7 MVVM ViewModel ideas
Advertisements

About pocketmobile

Window Phone Developer

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: