Wilfried Woivré & .Net

Live Meeting : MVVM Deep Dive / Tips & Tricks

JANV4

Merci à ceux qui était présent avant toute chose !

Avec Thomas Lebrun, nous avons présenté un Live Meeting sur quelques astuces que l’on peut utiliser avec le Design Pattern MVVM.

 

Vous pouvez retrouver les différentes démonstrations ici

Pour la rediffusion du Live Meeting que nous avons encore oublié d’enregistrer ….. Je publierais 4 vidéos prochainement avec 1 démonstration par vidéo.

DataTemplate : Appel de méthode du ViewModel depuis un DataTemplate situé dans un ItemsControl

DesignTime : Comment afficher des données en DesignTime avec une architecture de type MVVM

Unity : Comment utiliser Unity pour résoudre et instancier ces différents ViewModels

INotifyPropertyChanged : Différentes méthodes pour implémenter cette interface

Remonter

Live Meeting : MVVM de A a Z

DÉCE7

Avec Thomas Lebrun, nous avons réalisé un Live Meeting autour du pattern MVVM, celui ci avait pour but de refaire un tour d’horizon de ce dernier.

Donc comme promis voici les sources et le powerpoint de la session.

N’oubliez pas que nous organisons d’autres live meeting à peu près tout les deux mois le mardi soir de 19h à 20h, vous pouvez retrouver la liste ici

 

La ressource MVVM In the Box dont on a parlait pendant les questions/réponses se trouve ici.

EDIT Il ne sera pas possible de rejouer le WebCasts, cependant, je vais vous représenter la technologie, ainsi que la démonstration de façon plus complète prochainement.

 

Vous pouvez télécharger la vidéo sur mon Skydrive, vu la taille, elle est contenu dans un fichier 7zip splitté en deux : ici et

Dîtes moi en commentaire, si vous savez où je pourrais Upload la vidéo en 1 seul morceau (Youtube à échoué vu la taille de la vidéo). Et d’ailleurs si vous voulez d’autres vidéos, sur d’autres sujets proposez aussi via le formulaire de contact, je verrais si je peux les faire.

Remonter

Silverlight Toolkit pour Windows Phone

OCTO14

Pour ceux qui auraient rater l’information, il y a sur codeplex une version du Silverlight Toolkit pour Windows Phone 7.

Vous pouvez récupérer les binaires, les sources et un exemple d’implémentation sur http://silverlight.codeplex.com

Ce dernier contient donc comme élément :

  • ToggleSwitch
  • ContextMenu
  • DatePicker & TimePicker
  • WrapPanel
  • Gestures

Voilà qui devrait vous éviter de redévelopper ces éléments. Bibliothèque à suivre, je pense qu’elle sera enrichie au fur et à mesure.

A noter qu’à part le Silverlight Toolkit, il existe d’autres bibliothèques Silverlight qui ont été porté sur WP7, comme le slflow de Simon Ferquel que vous pouvez retrouver ici : http://slflow.codeplex.com/ (pas encore migré sur la RTM : dernière update le 21 juillet. Mais vous avez le code source !)

Remonter

WCF RIA Services et les Complex Type d’Entity Framework

MAI1

Actuellement, je suis en train de réaliser un projet pour une formation Silverlight, le but de ce projet est de réaliser un mini site eCommerce totalement en Silverlight. Il s’articule autour des technologies Entity Framework et RIA Services ainsi que Silverlight 4 avec un design pattern de type MVVM. J’utilise comme base de données AdventureWorksLT2008. Je donnerais tout le code de cette démonstration sur mon blog un autre jour, avec une explication un peu plus conséquente !

Enfin passons, pour ma vie, dans cet article je vais vous montrer comment renvoyer un Complex Type crée depuis EntityFramework et renvoyer dans notre Silverlight.

Je commence donc par créer un projet de type Silverlight Business Application, ensuite je crée un modèle Entity Framework, ici, on se basera uniquement sur la table Employees de NorthWind.

Sur cette table, je vais vouloir récupérer uniquement les noms et les prénoms des employés, afin de les renvoyer à mon application Silverlight, je vais donc créer un ComplexType contenant deux chaines de caractères.

J’en suis donc arrivé à un diagramme ressemblant à ceci :

image

Maintenant créons notre Domain Service, et notre requête Linq qui ressemble à cela :

[EnableClientAccess()]
public class NortwindDomainService : LinqToEntitiesDomainService<NorthwindEntities>
{

// TODO: Consider
// 1. Adding parameters to this method and constraining returned results, and/or
// 2. Adding query methods taking different parameters.
public IQueryable<EmployeeInformation> GetEmployees()
{
return from e in ObjectContext.Employees
select new EmployeeInformation() { FirstName = e.FirstName, LastName = e.LastName };
}
}

On s’apprête donc à créer une interface pour afficher les données en Silverlight, sauf qu’en compilant on obtient une erreur :

image

Il manque donc une clef à notre complex type, qu’à cela ne tienne, pour en rajouter une, il suffit de créer une classe partielle à notre type et d’y ajouter une clé.

public partial class EmployeeInformation
{
[Key]
[DataMember]
public int EmployeeInformationId { get; set; }
}

Maintenant que ce problème est réglé et qu’on a bien entendu ajouter la déclaration de notre clé dans notre requête, il faut passer au front, on va donc créer un liste qui affiche les noms et les prénoms des employés

On obtient un code de ce style :

public IEnumerable<Entity> Employees
{
get { return (IEnumerable<Entity>)GetValue(EmployeesProperty); }
set { SetValue(EmployeesProperty, value); }
}

// Using a DependencyProperty as the backing store for Employees.  This enables animation, styling, binding, etc...
public static readonly DependencyProperty EmployeesProperty =
DependencyProperty.Register("Employees", typeof(IEnumerable<Entity>), typeof(MainPage), new PropertyMetadata(null));

public MainPage()
{
InitializeComponent();
this.DataContext = this;
this.Loaded += (sender, e) => LoadData();
}

private void LoadData()
{
NortwindDomainContext context = new NortwindDomainContext();
LoadOperation loadOp = context.Load(context.GetEmployeesQuery());
Employees = loadOp.Entities;
}

On charge donc le tout dans une liste que l’on expose à notre interface, le tout compile sans aucun problème on s’attend donc à voir un résultat, cependant on obtient encore une erreur :

image

On a donc une exception au niveau de notre DomainService, la requête quand à elle est bonne, le seul problème est en fait une erreur d’Entity Framework, on ne peut pas créer de Complex Type dans une requête Linq To Entities.

Il nous faut donc passer via un objet anonyme pour pouvoir ensuite instancier notre complex Type.

public IQueryable<EmployeeInformation> GetEmployees()
{
var employees = from e in ObjectContext.Employees
select new { e.EmployeeID, e.FirstName, e.LastName };

return employees.ToList().ConvertAll(e => new EmployeeInformation()
{
EmployeeInformationId = e.EmployeeID,
FirstName = e.FirstName,
LastName = e.LastName
}).AsQueryable();

}

On obtient donc par la suite nos différentes données :

image

Et voilà en espérant que cette technique vous sera utile dans vos futurs développements avec RIA Services ! En plus je vous fournis tout le code source !

image

Remonter

Silverlight 4 & le CommandManager

AVRI4

 

En ce weekend de pâques un petit article, vous avez tous aperçu que depuis le début de Silverlight, il n’y a aucune trace du CommandManager qu’on peut avoir en WPF.

Et pourtant Silverlight, tout comme WPF, a en son sein l’interface ICommand permettant de gérer avec plus ou moins de souplesse nos différentes actions.

Donc jusque quelques lignes pour vous dire que sur ma page d’accueil (euh Codeplex), il y a un projet permettant d’ajouter un CommandManager à notre Silverlight.

Voici le lien où vous pouvez récupérer cette petite assembly : http://agcommandmanager.codeplex.com/

Remonter