2010-09-08 6 views
1

Je veux faire un UserControl réutilisable:Silverlight UserControl et son propre viewmodel accueilli dans une vue

  • VUE avec son propre viewmodel où est la récupération de données logique
  • Cette UserControl (ou View?) a un bouton 'OK' pour cibler un RelayCommand dans son viewmodel
  • J'accueille cette 'UserControl' dans une autre vue ('MainPage'), qui, elle-même, a son viewmodel

Ma question est:
Comment puis-je cibler les propriétés de VIEWMODEL de mon 'MainPage' avec les valeurs définies par mon UC?

Répondre

1

Tant que votre contrôle utilisateur est contenu dans votre page principale, il héritera du modèle de vue des pages principales. C'est la valeur par défaut et elle s'applique à moins que vous ne changiez explicitement le contexte de données par le biais d'une liaison de données ou d'un code.

Si votre contrôle utilisateur se lie à son propre modèle de vue, vous pouvez laisser le modèle de vue principal contenir une instance du modèle de vue enfant et l'exposer via une propriété publique. Vous pouvez maintenant définir le contexte de données de votre contrôle utilisateur en liant la propriété DataContext à la propriété sur le modèle de vue principal. Enfin, si votre modèle de vue enfant a une référence au modèle de vue principal, il pourra communiquer au besoin.

Edit:

Je vais essayer de configurer un exemple simple:

D'abord les modèles de vue:

public class MainPageViewModel 
{ 

    public MainPageViewModel() 
    { 
    ChildViewModel = new ChildViewModel(this); 
    } 

    public ChildViewModel {get; private set; } 

    public ICommand OkCommand { get { // return the command here }} 
} 

public class ChildViewModel 
{ 
    private MainPageViewModel _parentViewModel; 
    public ChildViewModel(MainPageViewModel parentViewModel) 
    { 
    _parentViewModel = parentViewModel; 
    } 

    // Returns the command from the main page view model 
    public ICommand OkCommand { get { return _parentViewModel.OkCommand; } } 

    // Other properties as well 
} 

Ici, nous avons le modèle de la vue principale qui a la vue enfant modèle en tant que propriété. Le modèle de vue enfant expose la commande Ok qui renvoie la valeur du modèle de vue principal.

maintenant dans votre principale XAML page vous pouvez effectuer les opérations suivantes:

<uc:MyUserControl DataContext="{Binding ChildViewModel}" /> 

Ici vous insérez votre contrôle utilisateur et définir son contexte de données à l'enfant modèle de vue du contrôle de l'utilisateur.

+0

Merci de votre réponse mais ... Est-ce que vous m'offrez un exemple? – Zorg

Questions connexes