更改时通知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();
答
您可以订阅PropertyChanged
事件(我假设你的类实现),并刷新视图中的处理程序:
var view = CollectionViewSource.GetDefaultView(Collection);
if (view != null)
{
view.Refresh();
}
不知道有一个更清洁的方式,虽然,但我相当积极,你需要在一个点上拨打Refresh
电话。
非常感谢,但我不明白我应该绑定什么。我绑定到:'list = CollectionViewSource.GetDefaultView(new ObservableCollection(ctx.EntitySet));' –
Cartesius00
2011-05-23 23:41:29
查看更新的示例,希望这有助于。 – 2011-05-24 01:09:23