2009-06-02 5 views
0

Hy les gars!Meilleure pratique pour les relations parent/enfant-viewmodel dans MVVM avec Onyx?

Je travaille actuellement sur un petit projet WPF utilisant MVVM via le framework Onyx.

Mon architecture est currentView comme ceci:

<DockPanel> 
    <Menu DockPanel.Dock="Top" Background="#cecece"> 
     <!-- Menu --> 
    </Menu> 

    <Grid> 
     <views:TranslationView x:Name="translationView" /> 
    </Grid> 
</DockPanel> 

La question que j'ai maintenant est de savoir comment mettre en œuvre la relation entre les deux viewmodels. Actuellement, j'ai juste le TranslationView ont son propre ViewModel sans lien vers le ViewModel parent.

Le problème est que je veux être en mesure d'ouvrir un fichier via MainView, puis analyser le contenu et les afficher dans le TranslationView. Y a-t-il une manière recommandée de faire ceci? Je pensais juste utiliser le TranslationViewModel comme une propriété dans MainViewModel et l'utiliser ensuite comme DataContext pour TranslationView, mais il semble fonctionner avec le modèle d'Onyx pour définir le ViewModel à travers une référence de type (pas un objet).

Répondre

0

Onyx n'a pas de "modèle pour définir le ViewModel à travers une référence de type (pas un objet)". La propriété attachée ViewModel peut recevoir une référence d'objet. En fait, cette propriété est un type d'objet et utilise la coercition pour transformer une instance de type en une instance d'objet du type spécifié. Ceci est une commodité seulement. Vous êtes libre d'attribuer une référence d'objet créée comme vous le souhaitez.

Comme la plupart des questions, il existe plusieurs façons de résoudre votre problème. La solution que vous avez mentionnée mais rejetée parce que vous pensiez que cela allait à l'encontre du design d'Onyx est une solution qui pourrait fonctionner, mais j'hésiterais à l'utiliser, simplement parce qu'elle crée un couplage plus serré. Une autre solution consisterait à utiliser le modèle Event Agregator pour communiquer entre les vues de manière déconnectée. Ou vous pourriez utiliser une approche plus axée sur le service. Par exemple, je définis généralement un service IApplication qui se trouve à l'endroit où vous accèderiez normalement à Application.Current dans un design étroitement couplé. Vous pouvez fournir une propriété sur ce service pour contenir le contenu du fichier chargé et exposer INotifyPropertyChanged sur le service pour permettre au TranslationViewModel de savoir que la propriété a été modifiée.

Questions connexes