est-ce que quelqu'un sait pourquoi ce code ne fonctionne pas :
PS : ViewModelBase abonnement contient tout pour RaisePropertyChanged etc. et ça fonctionne pour tout le reste sauf ce problème...
est-ce que quelqu'un sait pourquoi ce code ne fonctionne pas :
PS : ViewModelBase abonnement contient tout pour RaisePropertyChanged etc. et ça fonctionne pour tout le reste sauf ce problème...
Voici une classe occasionnelle qui sous-classes ObservableCollection et effectivement déclenche une action de remise à zéro lorsqu’une propriété sur un élément de liste change. Elle applique tous les éléments à mettre en œuvre `` .
L’avantage ici est que vous pouvez lier des données à cette classe et toutes vos liaisons mettra à jour avec les modifications apportées à vos propriétés de l’élément.
Le ContentList de la méthode de Jeu ne sera pas appelée lorsque vous modifiez une valeur à l'intérieur de la collection, au lieu de cela, vous devriez être à la recherche pour le CollectionChanged événement de tir.
public class CollectionViewModel : ViewModelBase
{
public ObservableCollection<EntityViewModel> ContentList
{
get { return _contentList; }
}
public CollectionViewModel()
{
_contentList = new ObservableCollection<EntityViewModel>();
_contentList.CollectionChanged += ContentCollectionChanged;
}
public void ContentCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
//This will get called when the collection is changed
}
}
MODIFIER
Ok, ça fait deux fois aujourd'hui, j'ai été mordu par la documentation MSDN avoir tort. Dans le lien que je vous ai donné, il dit:
Se produit lorsqu'un élément est ajouté, supprimé, modifiés, déplacés, ou de l'ensemble de la liste est actualisé.
Mais en fait elle n'a pas d' incendie lorsqu'un élément est modifié. Je suppose que vous aurez besoin d'un plus bruteforce méthode, puis:
public class CollectionViewModel : ViewModelBase
{
public ObservableCollection<EntityViewModel> ContentList
{
get { return _contentList; }
}
public CollectionViewModel()
{
_contentList = new ObservableCollection<EntityViewModel>();
_contentList.CollectionChanged += ContentCollectionChanged;
}
public void ContentCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Remove)
{
foreach(EntityViewModel item in e.OldItems)
{
//Removed items
item.PropertyChanged -= EntityViewModelPropertyChanged;
}
}
else if (e.Action == NotifyCollectionChangedAction.Add)
{
foreach(EntityViewModel item in e.NewItems)
{
//Added items
item.PropertyChanged += EntityViewModelPropertyChanged;
}
}
}
public void EntityViewModelPropertyChanged(object sender, PropertyChangedEventArgs e)
{
//This will get called when the property of an object inside the collection changes
}
}
Si vous allez avoir besoin de beaucoup vous pouvez sous-classe votre propre ObservableCollection qui déclenche l'événement CollectionChanged lorsqu'un membre déclenche son événement PropertyChanged automatiquement (comme il dit il doit dans la documentation...)
ObservableCollection n’est pas repropagées modifications des articles individuels en tant qu’événements CollectionChanged. Vous aurez soit besoin de s’abonner à chaque événement et transmettre manuellement, ou vous pouvez consulter la classe BindingList [T] , qui fera pour vous.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.