2016-08-16 1 views
-1

Je développe une application (C#, wpf) en utilisant la bibliothèque MVVM Light. J'ai une fenêtre principale avec ViewModel joint comme DataContext="{Binding Main, Source={StaticResource Locator}}". C'est bon. Mais dans la fenêtre principale j'ai différents UserControls. Lequel est utilisé au moment est défini par un commutateur comme:Comment déclarer/attacher un ViewModel pour un UserControl dans MVVM Light

<DataTemplate DataType="{x:Type model:Type1}"> 
     <controls:UC1 Content="{Binding}"/> 
    </DataTemplate> 

La question est de savoir comment déclarer ViewModel pour le UserControl et de relier à l'UC DataContext. Et ce serait très bien si cela prend en charge les données de démonstration au moment du design.

+0

Pourquoi voudriez-vous "déclarer ViewModel pour le UserControl et de le relier à l'UC DataContext"? Ceci est fait automatiquement lorsque vous utilisez DataTemplates et ContentControls correctement. Cela suggère que 1) vous n'êtes pas, ou 2) vous créez des modèles de vue spécifiquement pour contrôler le comportement de votre contrôle utilisateur. Je ne peux pas dire à partir de votre question si # 1 est vrai, et si # 2 est vrai, arrêtez cela. Est-ce qu'un TextBox a un TextBoxViewModel? MVVM! = Pas de code derrière. La logique de l'interface utilisateur va dans votre codebehind. – Will

+0

@ Will Oui, je lier mon UC DataContext maintenant. Et vous avez raison mon objectif principal est de contrôler le comportement de l'UC (# 2). Pourquoi je veux le faire est parce que cette UC est plutôt compliquée (en fait chaque contrôle est un petit programme, mais je veux en intégrer plusieurs sous la fenêtre principale). –

+0

Création ViewModels qui contrôlent le comportement de vos UserControls peut vous causer des méfaits. Le plus souvent en interférant avec le flux de DataContext. Il se peut que vous essayiez de lier des propriétés pseudo-DataContext à vos modèles de vue ou que vous ayez des problèmes pour jongler avec le contenu de DataContext. La solution est de ne pas le faire. Mettez votre logique d'interface utilisateur dans le codebehind. – Will

Répondre

-1

essayer cette

<DataTemplate DataType="{x:Type model:Type1}"> 
    <controls:UC/> 
</DataTemplate> 

et aussi ajouter

<ContentPresenter Content="{Binding ViewModelObj}"> 
</ContentPresenter> 
+0

"La question est de savoir comment déclarer ViewModel pour le UserControl et le lier à l'UC" –

+0

+0

@ASMahadik: Si vous avez plus d'informations pour clarifier votre répondez, vous devez modifier votre réponse pour inclure les nouvelles informations; De cette façon, n'importe quel lecteur peut comprendre votre réponse entière sans avoir à lire aussi l'historique des commentaires. –