Un peu tard peut-être, mais cela peut aider d'autres utilisateurs si je posterai quand même ...
Mise à jour du CollectionView.Filter basé sur un événement PropertyChanged est pas pris en charge par le cadre. Il y a un certain nombre de solutions autour de cela.
1) Implémenter l'interface IEditableObject sur les objets de votre collection et appeler BeginEdit et EndEdit lors de la modification de la propriété sur laquelle le filtre est basé. Vous pouvez en lire plus à ce sujet sur l'excellent blog du Dr.WPF ici: Editable Collections by Dr.WPF
2) Création de la classe suivante et utilisation de la fonction RefreshFilter sur l'objet modifié.
public class FilteredObservableCollection<T> : ObservableCollection<T>
{
public void RefreshFilter(T changedobject)
{
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, changedobject, changedobject));
}
}
Exemple:
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;
}
}
Abonnez-vous à l'événement PropertyChanged de l'objet TestClass lorsque vous créez, mais ne pas oublier de décrocher le eventhandler lorsque l'objet se retire, sinon cela peut conduire à fuites de mémoire
OU
Injecter le TestCollection dans le TestClass et utiliser la fonction de RefreshFilter à l'intérieur du poseur TestProp. De toute façon, la magie ici est travaillée par le NotifyCollectionChangedAction.Replace qui met à jour l'élément entièrement.
Dans le cas où quelqu'un trouve cela, il est un peu obsolète maintenant. Dans WPF 4.5, de nouvelles fonctionnalités ont été ajoutées pour permettre le tri, le filtrage et le regroupement "en direct". Vous voyez http://www.jonathanantoine.com/2011/10/05/wpf-4-5-%E2%80%93-part-10-live-shaping/ –