2010-12-10 88 views
0

En écrivant une application Silverlight 4 avec un TreeView et Ria Services dans MVVM pour afficher les clients hiérarchiquement. Je ne veux pas charger tous les clients de la base de données, je veux les recharger en développant un vertex à la place. Y at-il une chance de le faire en utilisant MVVM Pattern?Silverlight 4 MVVM TreeView Control

Dans le modèle client de la base de données, il existe une relation "Parent_id" et pas de "child_id"!

Merci beaucoup!

Répondre

1

Oui, c'est possible. Mais soyez informé que c'est une tâche compliquée.

Au début, vous devriez avoir une viewmodel avec les propriétés suivantes:

  • Id (utilisé pour recevoir childitems par parentId)
  • Titre (figurant dans le TreeView)
  • ChildItems (collection réelle ou articles vide)
  • IsExpanded
  • ESTVIDE (si cet élément est l'élément enfant et n'a pas encore été chargé)

Au début, vous avez une liste de ces modèles, mais la collection ChildTtems doit contenir des éléments vierges. Si la collection childitems est vide, vous ne pourrez pas développer un élément parent.

Étape suivante - lier la propriété IsExpanded. Vous pouvez trouver une solution sur this link.

private bool isExpanded; 

    public bool IsExpanded 
    { 
     get { return isExpanded; } 
     set 
     { 
      isExpanded = value; 
      OnPropertyChanged("IsExpanded"); 
      if(isExpanded) 
       this.UpdateChildItems(); 
     } 
    } 

    public ObservableCollection<HierarchyViewModel> ChildItems { get; set; } 

    void UpdateChildItems() 
    { 
     //Check wheter the child items are blank (this.ChildItems.Any(ci=>ci.IsBlank)) 
     //and if answer is yes, receive real items from service, 
     //transform each of them to a viewmodel class and set IsBlank=false 
    } 

De même, vous devez recevoir un nombre d'éléments enfants pour chaque élément et générer une collection d'éléments vierges.

+0

Merci beaucoup! Mais attention, il n'est pas possible de définir la liaison "IsExpanded" dans XAML dans Silverlight. Vous devez sous-classer la classe TreeView et TreeViewItem un code de la liaison. – Tom

+0

Oui, il est nécessaire d'avoir une classe dérivée, mais il n'y a pas de problème, car cette classe a des propriétés identiques et peut être stylée de la même manière. – vorrtex