2010-10-06 27 views
0

J'ai une série de vues qui doivent être affichées en fonction de l'élément actuellement sélectionné dans un arbre dans une vue parente. Ces vues sont créées et enregistrées avec la région pendant la méthode d'initialisation de la vue parente et sont correctement désactivées/activées, donnant ainsi l'effet de permuter/d'écarter la vue correcte. Ces vues ont un seul viewmodel sous-jacent comme leur datacontext, qui contient des objets de données prenant en charge INotifyPropertyChanged.NullReferenceException lancé dans NotifyPropertyChanged lors du changement de vue avec modification en cours

Cette solution fonctionne s'il n'y a pas de modifications en cours en cours dans la vue enfant mais si une modification est en cours dans une vue (l'utilisateur a modifié le contenu d'une description mais n'a pas cliqué sur zone de texte) et que cette vue est désactivée (c'est-à-dire qu'un objet différent est cliqué dans la vue parente, ce qui entraîne une désactivation). Une exception NullReferenceException est levée dans NotifyPropertyChanged() de l'objet de données sous-jacent au maintenant. vue désactivée.

Ce qui semble se passer est la suivante:

  • Une édition est lancée par l'utilisateur dans la vue enfant
  • L'utilisateur clique sur un élément dans l'arborescence dans la vue parent
  • Le choix du contrôleur le changement de l'élément dans l'arborescence
    • sélectionné la vue de l'enfant en cours est désactivé
    • la nouvelle vue est activée
  • Le passage de la modification se produit à l'objet de données sous-jacent (la méthode de réglage est de s'appelé)
  • Un événement de notification de modification est généré par l'objet de données à la suite de ce changement
  • Une exception de référence null Est lancé.

Vraisemblablement, cet événement de notification de modification est envoyé à la vue maintenant désactivée, mais la vue n'est pas nulle.

Répondre

1

Je ne l'ai pas essayé moi-même, mais je crois qu'une solution consistait à écouter l'événement de désactivation de la vue en utilisant IActiveAware et annuler toute modification.

Voyez si this link aide.

+0

Merci pour votre aide 'Assez déjà'. Votre réponse m'a donné l'idée de simplement enregistrer les changements en cours avant de changer la vue. Je pourrais le faire assez facilement dans le code du contrôleur. – dbush