Một hơi muộn có lẽ, nhưng điều này có thể giúp người dùng khác vì vậy tôi sẽ đăng anyway ...
Cập nhật CollectionView.Filter dựa trên một sự kiện PropertyChanged không được hỗ trợ bởi framework. Có một số giải pháp xung quanh vấn đề này.
1) Triển khai giao diện IEditableObject trên các đối tượng bên trong bộ sưu tập của bạn và gọi BeginEdit và EndEdit khi thay đổi thuộc tính mà bộ lọc dựa vào. Bạn có thể đọc thêm về điều này trên blog tuyệt vời của Dr.WPF tại đây: Editable Collections by Dr.WPF
2) Tạo lớp sau và sử dụng chức năng RefreshFilter trên đối tượng đã thay đổi.
public class FilteredObservableCollection<T> : ObservableCollection<T>
{
public void RefreshFilter(T changedobject)
{
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Replace, changedobject, changedobject));
}
}
Ví dụ:
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;
}
}
Theo dõi sự kiện PropertyChanged của đối tượng TestClass khi bạn tạo ra nó, nhưng đừng quên để mở móc các eventhandler khi đối tượng bị loại bỏ, nếu không điều này có thể dẫn đến bộ nhớ bị rò rỉ
HOẶC
Chích TestCollection vào TestClass và sử dụng chức năng RefreshFilter bên trong setter TestProp. Nhưng dù sao, phép thuật ở đây được làm việc bởi NotifyCollectionChangedAction.Replace để cập nhật hoàn toàn mục đó.
Nguồn
2011-04-01 15:06:13
Trong trường hợp có ai tìm thấy này, nó là một chút ra khỏi ngày bây giờ. Trong WPF 4.5, các tính năng mới được thêm vào để cho phép sắp xếp, lọc và nhóm "Live". Xem http://www.jonathanantoine.com/2011/10/05/wpf-4-5-%E2%80%93-part-10-live-shaping/ –