2010-07-07 5 views
1

dans mon application Silverlight 4 J'ai une ObservableCollection que je lie à deux zones de liste différentes. Les listboxitems montrant le contenu de l'objet MyClass. Lorsque j'ajoute un élément à ObservableCollection, le nouvel élément s'affiche correctement dans les deux zones de liste.Propager les modifications du modèle à afficher dans Silverlight

J'ai défini le mode de reliure de manière bidirectionnelle, de sorte que la modification des éléments listbox mettra automatiquement à jour le modèle. Cela fonctionne jusqu'à présent. Mon problème est, que le contenu de l'autre zone de liste ne met pas à jour avec le modèle mis à jour. L'ajout d'un nouvel élément s'affichera correctement sur l'autre listbox, mais les mises à jour du contenu (que j'ai vérifié) ne le seront pas.

Toutes les idées pour réaliser: Le contenu de l'autre listbox doit être mis à jour automatiquement, lorsque je mets à jour le contenu dans une liste.

Merci à l'avance,
Frank

Répondre

2

Pour développer ce que luke a dit que votre classe doit implémenter INotifyPropertyChanged et vos propriétés doivent lancer l'événement PropertyChanged dans leur setters.

public class MyClass : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; // This may be named wrong 

    private string _myString = null; 

    public string MyString 
    { 
     get { return _myString; } 
     set 
     { 
      if(value == _myString) 
       return; 
      _myString = value; 
      var eh = PropertyChanged; 
      if(eh != null) 
       eh(this, new PropertyChangedEventArgs("MyString")); 
     } 
    } 
} 

La propriété MyString informera l'interface utilisateur qu'il a changé, ce qui déclenchera la liaison mise à jour.

+0

merci pour le code! Une erreur est que l'appel d'événement doit ressembler à: PropertyChanged (this, new PropertyChangedEventArgs ("Name")); – Aaginor

+0

Je savais que c'était faux, mais je ne pouvais pas me souvenir de la syntaxe exacte au sommet de ma tête. Merci pour la correction. – Stephan

1

vous devez vous assurer que vos objets de la collection observables et mettre en œuvre INotifyPropertyChanged ils doivent poster des événements de changement lorsque vos propriétés changent de contenu.

+0

cela a fait le travail, merci! – Aaginor