通知 WPF DataGrid 有关更改

发布于 2024-11-08 22:19:46 字数 388 浏览 0 评论 0原文

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

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

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

先感谢您!

詹姆斯

I have a DataGrid bound to the ICollectionView (with filter on). More specifically, I have set view.Filter = SomeFilteringFunction which uses public DateTime DateFrom { get... set... } property, also bound to the DatePicker.

Well, and now, when I change DatePicker, bound property DateFrom is correctly changed but the DataGrid is not obviously re-filtered.

What is the most right way how to notify DataGrid to update itself?

Thank you in advance!

James

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我做我的改变 2024-11-15 22:19:46

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

You shouldn't be binding directly to the ICollectionView, rather you bind to the source collection, and then apply the filter to the ICollectionView returned by CollectionViewSource.GetDefaultView.

<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;

Then when the value of the DatePicker changes you need to tell the ICollectionView to update.

ICollectionView view = CollectionViewSource.GetDefaultView(MyCollection);
view.Refresh();
苦笑流年记忆 2024-11-15 22:19:46

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

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

虽然不确定是否有更干净的方法,但我非常肯定您需要在某一时刻进行 Refresh 调用。

You can subscribe to the PropertyChanged event (which i assume you implemented on the class) and refresh the view in the handler:

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

Not sure if there is a cleaner way, though, but i'm quite positive you need to make that Refresh call at one point.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文