Une bonne façon de rafraîchir la liaison de données sur toutes les propriétés d'un ViewModel lors des changements de Modèle

Version Courte

Si je mettre à jour le Modèle d'objet que mon ViewModel enveloppements, ce qui est un bonne façon de biens d'incendie-changement des notifications pour toutes les propriétés du modèle que mon ViewModel expose?

Version Détaillée

Je suis en développement WPF client à la suite de la pattern MVVM, et essaie de gérer les mises à jour, à partir d'un service, les données affichées dans mes Vues. Lorsque le client reçoit une mise à jour, la mise à jour s'affiche sous la forme d'un DTO qui-je l'utiliser comme un Modèle.

Si ce modèle est une mise à jour d'un modèle existant dans la Vue, je veux de l'associé ViewModel pour mettre à jour ses propriétés liées aux données, de sorte que le point de Vue reflète les changements.

Permettez-moi d'illustrer avec un exemple. Envisager de mon Modèle:

class FooModel
{
  public int FooModelProperty { get; set; }
}

Enveloppé dans un ViewModel:

class FooViewModel
{
  private FooModel _model;

  public FooModel Model 
  { 
    get { return _model; }
    set 
    { 
      _model = value; 
      OnPropertyChanged("Model"); 
    }
  }

  public int FooViewModelProperty
  {
    get { return Model.FooModelProperty; }
    set 
    {
      Model.FooModelProperty = value;
      OnPropertyChanged("FooViewModelProperty");
    }    
}

Le Problème:

Quand un modèle mis à jour arrive, j'ai mis le Dernier Modèle de la propriété, comme suit:

instanceOfFooVM.Model = newModel;

Cela provoque OnPropertyChanged("Model") à feu, mais pas OnPropertyChanged("FooViewModelProperty"), à moins que j'appelle le dernier explicitement à partir de Models'setter. Donc, un point de Vue lié à FooViewModelProperty ne sera pas mise à jour pour afficher la nouvelle valeur de la propriété quand j'ai changer de Modèle.

Appelant explicitement OnPropertyChanged pour tous les exposés des propriétés du Modèle n'est évidemment pas une solution souhaitable, et ni est la prise de la newModel et d'itération grâce à ses propriétés de mettre à jour le ViewModel les propriétés d'un-à-un.

Ce qui est une meilleure approche de ce problème de mise à jour d'un modèle dans son ensemble et d'avoir le feu des notifications de changement pour l'ensemble de ses propriétés exposées?

InformationsquelleAutor Dan J | 2011-01-10