正在通知WPF DataGrid更改

本文关键字:DataGrid 更改 WPF 通知 | 更新日期: 2023-09-27 17:57:34

我有一个绑定到ICollectionViewDataGrid(打开过滤器)。更具体地说,我已经设置了view.Filter = SomeFilteringFunction,它使用public DateTime DateFrom { get... set... }属性,也绑定到DatePicker

现在,当我更改DatePicker时,绑定属性DateFrom被正确更改,但DataGrid显然没有被重新过滤。

如何通知DataGrid更新自身最正确的方式是什么?

提前谢谢!

James

正在通知WPF DataGrid更改

您不应该直接绑定到ICollectionView,而是绑定到源集合,然后将筛选器应用于CollectionViewSource.GetDefaultView.返回的ICollectionView

<DataGrid ItemsSource="{Binding MyCollection}" />
// should raise INotityPropertyChange.PropertyChanged
public ObservableCollection<Entity> MyCollection { get; set; }
MyCollection = new ObservableCollection<Entity>(ctx.EntitySet)); 
ICollectionView view = CollectionViewSource.GetDefaultView(MyCollection);
view.Filter = SomeFilteringFunction;

然后,当DatePicker的值更改时,您需要通知ICollectionView进行更新。

ICollectionView view = CollectionViewSource.GetDefaultView(MyCollection);
view.Refresh();

您可以订阅PropertyChanged事件(我假设您在类上实现了该事件)并刷新处理程序中的视图:

var view = CollectionViewSource.GetDefaultView(Collection);
if (view != null)
{
    view.Refresh();
}

不过,我不确定是否有更干净的方法,但我很肯定你需要在某一点上拨打Refresh电话。