Brute force:
- à chaque gestionnaire Joindre événement PropertyChanged pour chaque élément enfant
- Prenez le ListCollectionView de votre CollectionViewSource
- Refresh appel.
EDIT:
Le code pour 1, 2 habiterait dans votre code-behind.
Pour # 1, vous feriez quelque chose comme:
private void Source_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
foreach(SomeItem item in e.NewItems)
{
item.PropertyChanged += new PropertyChangedEventHandler(_SomeItem_PropertyChanged);
}
break;
....
**HANDLE OTHER CASES HERE**
....
}
}
Pour # 2, dans votre gestionnaire CollectionChanged, vous feriez quelque chose comme:
private void _SomeItem_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
ListCollectionView lcv = (ListCollectionView)(CollectionViewSource.GetDefaultView(theListBox.ItemsSource));
lcv.Refresh();
}
EDIT2: Cependant, dans ce cas, je voudrais fortement vous suggérons de vérifier aussi ListCollectionView.NeedsRefresh et seulement rafraîchir si cela est défini. Il n'y a aucune raison de ré-trier si vos propriétés ont changé ce qui n'affecte pas le tri.
Alors, vous lier votre OC à un Listbox et ont le SortDescription sur la zone de liste? – apandit
C'est exact. Quand une propriété d'un élément enfant est modifiée, je voudrais que le tri reflète ce changement. – Nate