2009-05-27 12 views
1

Ich habe eine Listenansicht, die eine Spalte Databound zu einem list.Count hat unten: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> 

Die Liste implementiert INotifyCollectionChanged. Wenn ich jedoch ein Element zur Liste hinzufüge, wird die Listview-Spalte nicht aktualisiert. mache ich etwas falsch in meiner Bindung? Ich kann Folgendes tun:

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

Die im Grunde löst das PropertyChanged-Ereignis der Sammlung. Dies zwingt wpf dazu, sich neu zu binden, aber ich möchte lieber keine Fülle von Ereignissen haben, die durch meinen Code fliegen (besonders die unnötigen).

Irgendwelche Ideen?

Antwort

1

Das Problem ist, dass, während Sie eine Eigenschaft geändert für Kontakte zu erhöhen, müssen Sie nicht ein Ereignis für die Count-Eigenschaft erhöhen ..

Sie können dieses Problem lösen mit

OnPropertyChanged("Count") 

in Ihrer Liste, da Ihre Liste implementiert die INotifyPropertyChanged-Schnittstelle ...

+0

danke, ich habe diesen Überblick nicht bemerkt. – Jose

1

Alternativ können Sie stattdessen von ObservableCollection ableiten. Es enthält alle Änderungsbenachrichtigungscodes und könnte Ihnen auf lange Sicht etwas Zeit sparen.

+0

Problem ist, dass ich der Auflistungsklasse, die ich für die Datenbindung benötige, einige Eigenschaften hinzugefügt habe. – Jose

+0

Die ObservableCollection wurde für die Datenbindung erstellt. Darüber hinaus können Sie daraus leicht weitere Funktionen hinzufügen, falls erforderlich. – SergioL