7
votes

WPF: Comment puis-je accroître la notification de collection UsSource de ListView?

J'ai un listview code> qui est DataNound à un Observablecollection CODE> ...

<ListView x:Name="List1" ItemsSource="{Binding MyList}" />


0 commentaires

3 Réponses :


0
votes

Vous allez devoir attacher le gestionnaire à votre liste. Ou, utilisez un < Code> CollectionView et accroche l'événement modifié là-bas.

Dans votre codeBeHind, faites comme ceci: xxx


0 commentaires

0
votes

Un observablecollection {t} expose le Reliure à un itemSource Le moteur de liaison de données gère la propogation de Changements de la source à la commande d'éléments, mais si vous devez effectuer un traitement supplémentaire, vous pouvez joindre un gestionnaire à l'événement de collectionChanged et utiliser le NotifyCollectionChangeDeventargs fournit.

En supposant que vous avez une propriété publique à votre modèle Nommé MyList: P>

public ObservableCollection<T> MyList
{
  get
  {
    if(_viewModelMyList == null)
    {
      _viewModelMyList = new ObservableCollection<T>;
      _viewModelMyList.CollectionChanged += (o, e) => 
      {
        // code to process change event can go here
        if(e.Action == NotifyCollectionChangedAction.Add)
        {
        }
      };
    }
    return _viewModelMyList;
  }
}
private ObservableCollection<T> _viewModelMyList;


1 commentaires

Cela fonctionnerait si l'affiche originale souhaite que la logique soit sur le point de vue, mais je vais deviner qu'il veut une logique supplémentaire sur la vue depuis qu'il a montré un XAML et une liaison. Je pourrais toutefois avoir tord.



25
votes

Par défaut, le itemsSource code> est de type iEnumerable code> . Vous devez d'abord lancer à un type qui a accès au collectionChanged code> événement, puis ajoutez un gestionnaire pour cet événement.

((INotifyCollectionChanged)List1.ItemsSource).CollectionChanged +=
    new NotifyCollectionChangedEventHandler(List1CollectionChanged);

public void List1CollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
{
    // Your logic here
}


1 commentaires

Cela a parfaitement fonctionné et merci pour les informations sur le casting.