2009-05-27 14 views
1

J'ai une vue de la liste qui a une databound colonne à un list.Count voir ci-dessous:WPF Listview databinding

<ListView.View> 
    <GridView> 
     <GridViewColumn Header="Contacts" DisplayMemberBinding="{Binding Path=Contacts.Count}"/> 
     <GridViewColumn Header="Notes" DisplayMemberBinding="{Binding Path=Notes.Count}"/> 
    </GridView> 
</ListView.View> 

La liste met en œuvre INotifyCollectionChanged. Mais lorsque j'ajoute un élément à la liste, la colonne listview n'est pas actualisée. est-ce que je fais quelque chose de mal dans ma liaison? Je peux faire ce qui suit:

void _Contacts_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
    { 
     OnPropertyChanged("Contacts"); 
    } 

Ce qui pose essentiellement l'événement PropertyChanged de la collection. Cela oblige wpf à rebondir, mais je préférerais ne pas avoir une abondance d'événements volant à travers mon code (surtout les inutiles).

Des idées?

Répondre

1

Le problème est que si vous soulevez une propriété a changé pour les contacts, vous ne soulevez pas un événement pour la propriété Count ..

Vous pouvez résoudre ce avec

OnPropertyChanged("Count") 

dans votre liste, depuis votre liste implémente l'interface INotifyPropertyChanged ...

+0

merci, je n'ai pas remarqué cet oubli. – Jose

1

Alternativement, vous pouvez dériver de ObservableCollection à la place. Il a tout le code de notification de changement intégré et pourrait vous faire gagner du temps à long terme.

+0

Problème est-ce que j'ai ajouté quelques propriétés à la classe de collection dont j'ai besoin pour la liaison de données. – Jose

+0

ObservableCollection est conçu pour la liaison de données. De plus, vous pouvez en tirer facilement pour ajouter des fonctionnalités supplémentaires si nécessaire. – SergioL