Грубая сила:
- Присоединить обработчик к каждому событию PropertyChanged для каждого дочернего элемента
- захватить ListCollectionView от вашего CollectionViewSource
- Вызов Refresh.
EDIT:
Код для 1, 2 будет жить в вашем коде-позади.
Для # 1, вы могли бы сделать что-то вроде:
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**
....
}
}
Для # 2, в обработчике CollectionChanged, вы могли бы сделать что-то вроде:
private void _SomeItem_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
ListCollectionView lcv = (ListCollectionView)(CollectionViewSource.GetDefaultView(theListBox.ItemsSource));
lcv.Refresh();
}
EDIT2: Однако в этот случай, я бы сильно предположил, что вы также проверяете ListCollectionView.NeedsRefresh и только обновляете, если это установлено. Нет причин повторно сортировать, если ваши свойства изменились, которые не влияют на сортировку.
Итак, вы связываете свой OC к Listbox и имеют sortdescription на ListBox? – apandit
Это правильно. Когда свойство дочернего элемента изменяется, я хотел бы, чтобы сортировка отражала это изменение. – Nate