Trochę późno, być może, ale może to pomóc innym użytkownikom, więc będę pisać tak ...
Aktualizacja CollectionView.Filter oparciu o zdarzenia PropertyChanged nie jest obsługiwany przez ramy. Istnieje wiele rozwiązań w tym zakresie.
1) Implementowanie interfejsu IEditableObject na obiektach wewnątrz kolekcji oraz wywoływanie BeginEdit i EndEdit podczas zmiany właściwości, na której oparty jest filtr. Możesz przeczytać więcej na ten temat na doskonałym blogu Dr.WPF: Editable Collections by Dr.WPF
2) Tworzenie następującej klasy i korzystanie z funkcji RefreshFilter na zmienionym obiekcie.
public class FilteredObservableCollection<T> : ObservableCollection<T>
{
public void RefreshFilter(T changedobject)
{
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, changedobject, changedobject));
}
}
Przykład:
public class TestClass : INotifyPropertyChanged
{
private string _TestProp;
public string TestProp
{
get{ return _TestProp; }
set
{
_TestProp = value;
RaisePropertyChanged("TestProp");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName)
{
var handler = this.PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
FilteredObservableCollection<TestClass> TestCollection = new FilteredObservableCollection<TestClass>();
void TestClass_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
switch (e.PropertyName)
{
case "TestProp":
TestCollection.RefreshFilter(sender as TestClass);
break;
}
}
Zapisz się do zdarzenia PropertyChanged obiektu TestClass podczas jego tworzenia, ale nie zapomnij, aby odczepić eventhandler gdy obiekt zostanie usunięty, gdyż może to doprowadzić do pamięć przecieki
OR
wstrzyknąć TestCollection karne TestClass oraz korzystać z funkcji RefreshFilter wewnątrz nastawczym TestProp. W każdym razie magia jest tutaj obsługiwana przez funkcję NotifyCollectionChangedAction.Replace, która całkowicie aktualizuje element.
W przypadku każdy znajdzie to, że jest nieco nieaktualne teraz. W WPF 4.5 dodano nowe funkcje, aby umożliwić sortowanie, filtrowanie i grupowanie "na żywo". Zobacz http://www.jonathanantoine.com/2011/10/05/wpf-4-5-%E2%80%93-part-10-live-shaping/ –