2010-03-08 7 views
1

J'utilise l'architecture MVVM.Requête sur le modèle de conception MVVM sur WPF

J'ai un usercontrol UC comme Voir

Modèle est un ModelData classe

ViewModel (UCViewModel) est binded à un usercontrol.

J'ai trois autres commandes utilisateur qui sont à l'intérieur de la commande usager UC (discuté ci-dessus).

Disons que uc1, uc2 et uc3.

et la visibilité de uc1, uc2 et uc3 à l'intérieur UC dépend du type sélectionné (quel bouton radio jamais sélectionné).

Depuis UC est lié à UCViewModel et je dois faire toutes les choses liées à uc1, uc2 et uc3 à l'intérieur de UCViewModel. Puis-je avoir VM distinct à uc1, uc2 et uc3 .. si oui, comment puis-je faire cela? S'il vous plaît Aidez !!

Répondre

3

Pour autant que je comprends votre question, vous pouvez résoudre ce problème en ayant UC exposer une SelectedSubView (ou autre) propriété:

public object SelectedSubView { get; } 

En même temps, vous lient les radiobuttons à d'autres propriétés de UC et mettre à jour SelectedSubView en conséquence (n'oubliez pas d'implémenter INotifyPropertyChanged). En fonction des propriétés de radiobutton sélectionnées, le SelectedSubView doit renvoyer le ViewModel approprié.

Vous liez alors ContentPresenter à la propriété SelectedSubView et utilisez DataTemplates pour sélectionner en fonction du type de courant SelectedSubView les contrôles utilisateur corrects (UC1, UC2 ou de UC3).


Puisque vous ne souhaitez que cacher Vues inactifs, il est probablement préférable de garder leurs ViewModels respectifs autour, de sorte que vous pouvez les rendre les champs dans la UC classe

public class UC 
{ 
    private MyFirstViewModel vm1; 
    private MySecondViewModel vm2; 
    private MyThirdViewModel vm3; 
    private object selectedVM; 

    public object SelectedSubView 
    { 
     get { return this.selectedVM; } 
    } 

    // This method should be called whenever one of the radio buttons 
    // are updated (from their bindings) 
    private void UpdateSelectedView() 
    { 
     this.selectedVM = // pick from vm1, vm2, vm3 according to radio button 

     // Remember to raise INotifyPropertyChanged for SelectedSubView 
    } 
} 
+0

Merci Mark pour la réponse. Pouvez-vous s'il vous plaît me donner une idée de conserver un viewmodel ou comment définir le viewmodel à l'exécution? –

+0

@Ashish Ashu: Mise à jour ma réponse. –

Questions connexes