Le Pattern MVVM, ViewModel DataContext question
J'ai besoin de comprendre comment communiquer entre Viewmodel. Je suis nouveau sur MVVM, de sorte s'il vous plaît être gentil.
Voici une bêtise exemple
définitions de classe(à supposer que j'ai accroché à l'Enfant.Événement PropertyChanged dans le ParentViewModel):
public class ParentViewModel : ViewModelBase
{
public ChildViewModel Child { get; set; }
}
public class ChildViewModel : ViewModelBase
{
String _FirstName;
public String FirstName
{
get { return _FirstName; }
set
{
_FirstName = value;
OnPropertyChanged("FirstName");
}
}
}
Voici ce que vous voyez dans le dictionnaire de ressources
<DataTemplate DataType="{x:Type vm:ParentViewModel}">
<vw:ParentView/>
</DataTemplate>
<DataTemplate DataType="{x:Type vm:ChildViewModel}">
<vw:ChildView/>
</DataTemplate>
et le code-behind de la ChildView:
public partial class ChildView : UserControl
{
public QueueView()
{
InitializeComponent();
DataContext = new ChildViewModel();
}
}
Le problème évident est que lorsque le ChildView est instanciée (via la sélection à partir du DataTemplate), il crée une nouvelle ChildViewModel classe et la ParentViewModel n'y ont pas accès.
Alors, comment puis-je instancier le DataContext de la Vue à l'origine ViewModel qui a causé le DataTemplate pour être sélectionné?
Une correction évidente est de mmerge les propriétés dans le ChildViewModel dans le ParentViewModel, mais je préfère séparer, parce que pour la réutilisation.
Je suis sûr que la réponse est triviale, j'aimerais juste savoir ce que c'est. 🙂
Merci d'avance.
Était-ce une faute de frappe?
Oui, c'était une faute de frappe. désolé 🙂
OriginalL'auteur Jose | 2009-05-05
Vous devez vous connecter pour publier un commentaire.
Vous devez simplement supprimer la ligne:
La
DataContext
de la vue automatiquement par WPF.DataTemplates
ont toujours leur contexte de données ensemble de données pour le modèle (dans ce cas, le ViewModel):Le résultat final est que vous pouvez construire votre modèle d'affichage des objets séparément (à la fois le parent et l'enfant des classes) et puis de les afficher plus tard, en les branchant simplement des contrôles de contenu.
Bien que le scénario serait probablement ressembler à quelque chose comme ceci: Dans une usine ou d'un constructeur, méthode, vous créez la mère et de l'enfant de l'objet. Cet objet serait remis à un point de vue.
Le point de vue de l'affichage de la mère à un contrôle du contenu et de l'enfant dans un autre, ou d'afficher à la fois le parent et l'enfant dans un HeaderedContent de contrôle.
OriginalL'auteur Josh G
La meilleure façon de communiquer entre les ViewModels à l'aide de la MVVM approche consiste à utiliser le Médiateur modèle (EventAggregator dans Prism). Un bon exemple de cette approche peut être vu dans les liens suivants:
Aussi consulter les MVVM exemple cadre du projet.
OriginalL'auteur Soni Ali
Disons que vous avez un QueueView qui utilise un QueueViewModel.
-- QueueView partie
J'ai été en supposant que le Modèle de l'Enfant est une propriété du Modèle Parent. (par exemple de l'Ordre + Liste des Détails de la Commande). Dans ce cas, vous pouvez utiliser la Propriété des notifications de Modification de communiquer dans le modèle de vue. Mais si elles sont séparées les modèles de vue, vous pouvez utiliser le Médiateur Modèle de communiquer.
OriginalL'auteur Soni Ali