2011-07-02 1 views
1

J'essaie de trouver une manière moins salissante de répéter un contrôle n fois, en fonction de la valeur de la propriété d'un modèle lié. Les premiers contrôles m de n doivent cependant être affichés différemment, tandis que m est lié à une propriété différente de ViewModel. Pour illustrer le problème, considère que j'ai un ViewModel comme celui-ci (n étant Display et mChecked ici):Répétition du contrôle n fois et liaison de chaque instance

public class MyViewModel : ViewModelBase { 
    public int Display { get; set; } 
    public int Checked { get; set; } 
    /* ... */ 
} 

Pour Display = 5, Checked = 3, la vue doit rendre quelque chose le long des lignes de:

(X) (X) (X) () () 

Chaque (X) et () doivent être des instances du même type de vue enfant. Maintenant, lorsque l'utilisateur clique sur le cinquième (dernière) commande, Checked doit être réglé sur 5 et la vue serait maintenant afficher

(X) (X) (X) (X) (X) 

Maintenant, je pouvais y parvenir en branchant quelques gestionnaires d'événements et en ajoutant programmation et obligatoire () changements à chaque fois Display. Je me demande cependant s'il existe une méthode plus concise et moins compliquée pour y parvenir. Pensez à ViewModel comme un modèle de la vue.

+0

Est-ce un contrôle d'évaluation? –

+0

Pas tout à fait, mais sa mécanique serait similaire. Il diffère également des contrôles d'évaluation en ce qui concerne son échelle: il peut et va changer la valeur maximale pendant l'exécution en fonction des circonstances extérieures. – Manny

Répondre

2

Donc, si vous voulez afficher une collection d'éléments dans la vue, vous devez fournir cette collection sur ViewModel.

Dans ce cas, ajoutez une collection au ViewModel qui change lorsque la valeur pour Affichage et Vérifié change. Puis liez un ItemsControl à la collection et fournissez un ItemTemplate pour les éléments.

+0

Cette solution est si simple, élégante et évidente qu'elle a glissé juste à côté de ma tête :) – Manny

Questions connexes