2010-06-24 3 views
0

J'ai essayé de travailler avec la bibliothèque d'applications composites (Prism) et j'ai mis en place un modèle assez standard que j'ai suivi le tutoriel de Microsoft. Fondamentalement, la vue est injectée dans la région. La vue est construite dynamiquement, en ajoutant des contrôles et ainsi de suite tous par programmation.Contrôles ReBind utilisant le modèle PRISM dans Silverlight

J'ai une commande qui est déclenchée et en postback Je voudrais redéfinir les contrôles de la vue en cours, au lieu de rendre complètement tous les contrôles à nouveau.

J'ai donc essayé de mettre à jour le modèle avec la version mise à jour en espérant que cela forcerait une reconsolidation des contrôles. Ça ne marche pas. Je ne sais pas quelle approche je devrais prendre, car je suis nouveau à Prism ...

Des idées?

Abonnez-vous un événement pour gérer postbacks

IEventAggregator aggregator = this.Container.Resolve<IEventAggregator>(); 
aggregator.GetEvent<DataInstanceLoadedEvent>().Subscribe(this.OnDataInstanceUpdated); 

mise en œuvre de l'événement

public void OnDataInstanceUpdated(DataInstance updatedInstance) 
{ 
    if(this.View.Model != null){ 
     // We need to rebind here 
     IRegion region = this.LocateRegion(this.View); // gets the region.... 
     this.View.Model.CurrentDataInstance = updatedInstance; // update the model instance 
    } 
    else{ 
     // Render all controls over again since view.model is null ... 
    } 
} 

Répondre

0

J'ai compris comment redéfinissez selon les modèles proposés de Microsoft.

Fondamentalement, tout ce que j'avais à faire était d'hériter de INotifyPropertyChanged sur mon modèle. Puis, suivant ce modèle, une fois que mon modèle est mis à jour, il est obligé de relier tous les contrôles en envoyant un événement qui informe le client que la propriété a effectivement changé.

public class MyModel : INotifyPropertyChanged 
{ 
    private DataInstance currentDataInstance; 
    public event PropertyChangedEventHandler PropertyChanged; 
    public DataInstance CurrentDataInstance 
    { 
     get 
     { 
      return this.currentDataInstance; 
     } 
     set 
     { 
      if (this.currentDataInstance == value) 
       return; 
      this.currentDataInstance = value; 
      this.OnPropertyChanged(new PropertyChangedEventArgs("CurrentDataInstance")); 
     } 
    } 
    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) 
    { 
     if (this.PropertyChanged != null) 
      this.PropertyChanged(this, e); 
    } 
} 
Questions connexes