Je veux faire une copie profonde d'un ObservableCollection dans Silverlight 4 afin de détecter les changements dans les éléments de la liste. Puisque ICloneable n'est pas disponible dans SL, comment puis-je faire cela? OU - Y at-il une meilleure façon de vérifier les changements dans les articles de la collection?Comment puis-je faire une copie profonde d'une ObservableCollection <T> dans Silverlight 4?
0
A
Répondre
0
Bien sûr. Si votre individu implémente INotifyPropertyChanged, vous pouvez l'enregistrer et l'écouter.
Fondamentalement, vos éléments individuels doivent implémenter la propriété modifiée. Voici un Widget qui fait cela:
public class Widget : INotifyPropertyChanged
{
private int _id;
public int Id
{
get { return _id; }
set
{
_id = value;
RaisePropertyChanged("Id");
}
}
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
RaisePropertyChanged("Name");
}
}
private void RaisePropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
Ensuite, vous devez gérer la collecte observable et enregistrer des événements de changement de collection. Lorsque des widgets sont ajoutés, vous vous connectez au changement de propriété. Quand ils sont enlevés, vous décrochez:
public class WidgetViewModel
{
public WidgetViewModel()
{
Widgets = new ObservableCollection<Widget>();
Widgets.CollectionChanged += Widgets_CollectionChanged;
}
void Widgets_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e != null && e.NewItems != null)
{
foreach (var widget in e.NewItems.OfType<Widget>())
{
widget.PropertyChanged += WidgetViewModel_PropertyChanged;
}
}
if (e != null && e.OldItems != null)
{
foreach(var widget in e.OldItems.OfType<Widget>())
{
widget.PropertyChanged -= WidgetViewModel_PropertyChanged;
}
}
}
void WidgetViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
switch(e.PropertyName)
{
case "Id":
break;
case "Name":
break;
default:
break;
}
}
public ObservableCollection<Widget> Widgets { get; private set; }
}
Dans le changement de propriété, vous pouvez traiter tout ce qui se passe.
Questions connexes
- 1. Comment faire une copie profonde d'un NSDictionary, la manière facile?
- 2. Copie profonde avec Array
- 3. Java Clonage - copie profonde et peu profonde copie
- 4. XSLT: copie enfant profonde
- 5. copie profonde du vecteur <Point> myArr
- 6. Copie profonde [] et ArrayList Java
- 7. Sortable ObservableCollection dans Silverlight
- 8. copie peu profonde une liste avec downcasting
- 9. Comment faire une copie profonde de NSManagedObject dans les données de base
- 10. Types de référence de copie profonde
- 11. ObservableCollection à clé dans Silverlight
- 12. copie profonde de l'enregistrement de doctrine
- 13. Ecriture d'une valeur de pointeur de copie en copie profonde
- 14. Comment faire une copie profonde de l'objet JAXB comme xmlbean XmlObject.copy()?
- 15. Copie profonde d'un objet python dérivé
- 16. Liaison ObservableCollection <Foo> à ObservableCollection <object>
- 17. env.Clone() dans scons ne fait pas de copie profonde
- 18. profonde clonage copie via la sérialisation
- 19. Est-ce que Scala AnyRef.clone effectue une copie peu profonde ou profonde?
- 20. ListBox Silverlight avec ObservableCollection <T> et filtre dynamique
- 21. LevelToVisibilityConverter dans Silverlight 4
- 22. Liaison profonde dans JavaFX
- 23. Comment créer un CollectionView pour ObservableCollection <T> dans Silverlight
- 24. Conversion ObservableCollection à un tableau dans Silverlight
- 25. Silverlight 4 et Page.Resources Binding
- 26. Comment faire une copie en profondeur des objets NHibernate?
- 27. Objet de copie profonde LINQ to SQL avec dépendances
- 28. Silverlight 4 Multithread
- 29. WebHttpBinding dans Silverlight 4
- 30. Meilleure façon de faire cette animation dans Silverlight 4?