2010-07-14 5 views
3

Je développe actuellement une application où j'aurai plusieurs fenêtres ouvertes en utilisant C# et WPF.Modèle/méthodologie pour la communication entre Windows et/ou UserControls

Existe-t-il un modèle ou une méthodologie commune permettant de faciliter la communication entre Windows et/ou UserControls? Par exemple, une fenêtre, appelons-la la «fenêtre de hiérarchie», peut afficher une hiérarchie de pays, de provinces et de villes dans le monde. En dehors de cela il y a plusieurs autres fenêtres qui peuvent afficher une province ou une ville par exemple ou vous permettent de créer une province ou une ville. Dans le cas de la création d'une nouvelle ville, quel est le meilleur moyen pour que ma «fenêtre de la ville» communique avec ma «Fenêtre de la Hierarachie» concernant l'ajout d'une ville ou le retrait d'une ville? Gardez à l'esprit que la fenêtre de hiérarchie peut ne pas être ouverte lors de la création d'une ville. À ce stade, il n'y a pas besoin d'une réponse/action.

Répondre

1

Il existe deux approches communes à ce:

  1. Utiliser l'injection de dépendances pour injecter un service commun.
  2. Utilisez un messager d'une certaine forme.

La deuxième option devient très populaire avec WPF et Silverlight. De nombreux outils courants, tels que MVVM Light (pour plus de détails, voir le Messenger class description), utilisent cette approche.

+0

J'ai vérifié la MVVM Light et bien que ce ne soit pas la direction que je vais suivre, les commentaires sur le site Web m'ont conduit au framework PRISM et à l'agrégateur d'événements. Merci pour le conseil! Un modèle de messagerie fera très bien dans mon application. – Matthew

0

juste ajouter à ce que Reed a écrit ci-dessus:

Quand je l'ai mis en œuvre ce (dans mon cas en utilisant MVVM) J'ai eu tendance à aller pour un modèle Messenger/Mediator premier à faire avancer les choses vers le haut et en cours d'exécution et factoriser il utiliser l'injection de dépendances. Pour un bon exemple du modèle Mediator, jetez un oeil à l'environnement Sasha Barbers MVVM appelé Cinch (on V2 now I think). Vous pouvez télécharger tout le code source et voir comment il a utilisé le Mediator - c'est un très très bon exemple. Vous pouvez également jeter un oeil sur le projet Microsoft Dev Lab sur Reactive Extensions pour .NET qui implémente IObservable et IObserver - pas directement lié à votre question mais un moyen très cool de faire de la messagerie.

Pour injection de dépendance ont un regard sur les choses Microsoft Unity Application Bloc k

qui aide l'espoir un peu.

0

Vous pouvez consulter le framework PRISM (dans WinForms, il s'agissait de CAB - Composite Application Block). C'est une partie de la Microsoft Patterns & Pratiques.
Vous pouvez utiliser la publication d'événements et d'abonnement pour communiquer entre les objets dans un très facile et moyen simple:

//publish: 
eventAggregator.GetEvent<ItemAddedEvent>().Publish(MyItem); 

//subscribe: 
eventAggregator.GetEvent<ItemAddedEvent>().Subscribe(MyMethod); 

Je ne l'ai pas utilisé à fond encore assez, mais ils fournissent beaucoup de documentation et un ensemble élégant de fonctionnalités pour prendre en charge DI, les commandes et la validation. Ça vaut le coup de vérifier!

0

Pour moi, cela ressemble à la nécessité d'implémenter le modèle Model-View-Presenter. Voir MVP on MSDN.

Questions connexes