2009-05-29 5 views
1

J'ai un problème de tri/liaison de WPF. (Disclaimer: Je suis très nouveau pour WPF et présenter des excuses si databinding si je pose une question vraiment stupide :-))La liaison WPF ne notifie pas les modifications

Tout d'abord, j'ai une classe d'entité LinqToSql Contact avec une EntitySet<Booking> réservations de propriété sur elle.

Si je lie directement à cet immeuble Réservations à une ListView, l'application semble informer correctement des modifications à l'élément sélectionné dans la ListView, telle qu'une zone de texte avec {Binding Path=Bookings/Comments} met à jour correctement.

// This code works, but Bookings is unsorted 
var binding = new Binding(); 
binding.Source = contact.Bookings; 
bookings.SetBinding(ItemsControl.ItemsSourceProperty, binding); 

Cependant, comme je ne peux pas l'air d'être en mesure de trouver un moyen de trier un EntitySet (voir this post), je suis en train de se lier à la place à une collection Observable, par exemple:

// This code doesn't notify of selected item changes in the ListView 
var binding = new Binding(); 
binding.Source = new ObservableCollection<Booking>(contact.Bookings.OrderByDescending(b => b.TravelDate).ToList()); 
bookings.SetBinding(ItemsControl.ItemsSourceProperty, binding); 

Mais cela ne semble pas notifier correctement la zone de texte des commentaires de sorte qu'elle se mette à jour.

Si quelqu'un a une solution pour trier les données avant ou après leur liaison, ou une autre solution qui fonctionnera qui serait très appréciée.

Répondre

2

Vous devez lier à un CollectionView plutôt qu'à la collection elle-même. Cela vous permettra de spécifier les critères de tri dont vous avez besoin. Exemple:

var collectionView = new ListCollectionView(contact.Bookings); 
collectionView.SortDescriptions.Add(new SortDescription("TravelDate", ListSortDirection.Ascending)); 
var binding = new Binding(); 
binding.Source = collectionView; 
bookings.SetBinding(ItemsControl.ItemsSourceProperty, binding); 
+0

Merci, cela trés bien, mais il ne parvient toujours pas à informer des changements d'éléments sélectionnés pour une raison quelconque. –

0

Hainesy,

L'objet Booking mettre en œuvre INotifyPropertyChanged de notifier le changement dans Comments propriété?

Sinon, vous ne pouvez pas attendre TextBox qui est lié à Comments propriété à être mis à jour automatiquement lorsque Comments changement

En utilisant ObservableCollection dans ce cas ne vous obtenir l'avantage de mettre à jour la vue des changements quand on ajoute Booking objets ou supprimé de la collection

-Rajesh

+0

Les commentaires pour une réservation ne changent jamais. Quels changements est la réservation actuellement sélectionnée dans la vue. Tout fonctionne correctement lorsque je me lie directement à EntitySet non trié. –