2010-12-08 71 views
0

Je travaille sur mon premier projet C#/WPF (je suis un développeur Java/Web avec une expérience Flex/As). Le modèle MVVM semblait être la voie à suivre alors j'ai commencé à grimper la courbe d'apprentissage ...Meilleure façon de notifier la modification d'état entre objets ViewModel lors de l'utilisation du modèle MVVM

Je voudrais savoir ce qui est considéré comme la manière d'aller notifier les modifications d'état entre les objets ViewModel associés.

Longue histoire courte, j'ai un UserControl contenant un TreeView qui est lié à un ReadOnlyCollection exposé par MyTreeViewModel. SomethingViewModel implémente INotifyPropertyChanged et génère un événement lorsque sa propriété 'IsSelected' est modifiée.

MyTreeViewModel a un gestionnaire d'événements attaché à l'événement PropertyChanged de SomethingViewModel et met à jour une propriété qu'il gère appelée 'CurrentlySelectedElement'. MyTreeViewModel implémente également INotifyPropertyChanged et génère un événement lorsque sa propriété 'CurrentlySelectedElement' est modifiée.

Enfin, j'ai un gestionnaire d'événements dans une autre classe ViewModel qui gère la modification de sélection.

Est-ce une façon correcte d'aborder cela en C#/WPF?

En outre, je n'aime pas vraiment utiliser les noms de propriété avec des chaînes dans mes méthodes de gestion d'événements; Pour l'instant, j'ai traité ce problème en exposant le nom de la propriété sous forme de chaîne statique, de sorte que je puisse simplement utiliser ce qui suit dans ma méthode de gestionnaire d'événement:

if(SomeViewModel.PROPERTY_IS_SELECTED.Equals(e.PropertyName)) { ... } 

Connaissez-vous une meilleure alternative? Je suppose qu'il devrait y avoir un moyen de le faire mais pour être honnête, je n'ai pas enquêté plus avant.

Merci pour vos commentaires!

Répondre

1

Consultez le modèle Event Aggregator. Il y a quelques implémentations là-bas. Si vous utilisez un framework MVVM (https://stackoverflow.com/questions/1280462/what-mvvm-framework-are-you-using, What framework for MVVM should I use?), il est probable qu'il contiendra également une implémentation.

+0

Merci pour votre réponse. Je vais jeter un coup d'œil à l'Event Aggregator, ça me semble plutôt sympa et cela me donnera plus de flexibilité. J'ai pris quelques cours du framework MVVM Foundation (à savoir ObservableObject et PropertyObserver) qui résolvent mon deuxième problème de refactoring friendlyness. – dSebastien