通知WPF DataGrid更改

时间:2011-05-23 22:34:05

标签: c# wpf entity-framework data-binding datagrid

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

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

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

提前谢谢!

詹姆斯

2 个答案:

答案 0 :(得分:4)

您不应该直接绑定到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();

答案 1 :(得分:0)

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

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

不确定是否有更干净的方式,但我非常肯定你需要在某一时刻进行Refresh电话。