2010-09-24 6 views
0

J'ai un DomainView qui vous permet de sélectionner une Entité dans mon domaine. L'entité est affichée dans EntityView dans DomainView.Conseils Silverlight MVVM avec les vues 'Composite'

Ma question est de savoir quelle devrait être la propriété 'DomainViewModel' à laquelle EntityView se lie?

  • L'entité, avec la vue elle-même envelopper dans un EntityViewModel et il se lie à cela?
  • L'entité, en utilisant un convertisseur sur la liaison pour convertir entre l'entité et EntityViewModel?
  • Un EntityViewModel, créé par le DomainViewModel?

Tout irait bien, je me demandais juste ce que serait le 'MVVM-way'? Ma préférence serait pour l'un des deux derniers.

Lee

Répondre

1

Avec le « MVVM sens » typique, ViewModels ne devrait pas être au courant d'autres ViewModels et la relation entre View et ViewModel est 1-1.

On dirait que votre vraie question est "Comment puis-je communiquer des données entre ViewModels"? Une interaction commune Maître/Détails.

Utilisez-vous des cadres? Je suis personnellement plus familier avec PRISM, mais les concepts sont similaires dans MVVM Light et d'autres. Dans PRISM, une bonne solution est la EventAggregator. DomainViewModel publie un événement d'agrégation "EntitySelected" auquel SubsityViewModel souscrit.

Une autre option consiste à injecter un service commun (ou un modèle, selon votre style) dans les deux ViewModels. Ce service fournira une propriété publique telle que CurrentEntity définie par le DomainViewModel selon les besoins.

L'un ou l'autre fournirait un mécanisme de communication de données entre les ViewModels sans que les ViewModels soient dépendants les uns des autres.

+0

Merci - pour le moment, je n'utilise pas de framework, juste Silverlight 4.0. MVVM en tant que pratique est encore assez nouveau pour moi - même si j'ai travaillé de cette façon pendant un certain temps - je n'avais pas réalisé que c'était MVVM! Je vais enquêter sur vos idées, mais si quelqu'un comme d'autres suggestions, s'il vous plaît faites le moi savoir. –