更改时通知WPF DataGrid

更改时通知WPF DataGrid

问题描述:

我有一个DataGrid绑定到ICollectionView(带过滤器)。更具体地说,我已经设置了view.Filter = SomeFilteringFunction,它使用public DateTime DateFrom { get... set... }属性,也绑定到DatePicker更改时通知WPF DataGrid

那么,现在,当我更改DatePicker时,绑定属性DateFrom已正确更改,但DataGrid未明显重新过滤。

如何通知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(); 
+0

非常感谢,但我不明白我应该绑定什么。我绑定到:'list = CollectionViewSource.GetDefaultView(new ObservableCollection (ctx.EntitySet));' – Cartesius00 2011-05-23 23:41:29

+0

查看更新的示例,希望这有助于。 – 2011-05-24 01:09:23

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

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

不知道有一个更清洁的方式,虽然,但我相当积极,你需要在一个点上拨打Refresh电话。