【问题标题】:Notifying WPF DataGrid on changes通知 WPF DataGrid 的更改
【发布时间】:2011-08-31 12:28:21
【问题描述】:

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

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

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

提前谢谢你!

詹姆斯

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 非常感谢,但我不明白我应该绑定什么。我绑定到:list = CollectionViewSource.GetDefaultView(new ObservableCollection&lt;Entity&gt;(ctx.EntitySet));
    【解决方案2】:

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

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

    虽然不确定是否有更清洁的方法,但我非常肯定你需要在某一时刻拨打Refresh

    【讨论】:

      猜你喜欢
      • 2013-10-17
      • 2010-10-26
      • 1970-01-01
      • 2011-06-05
      • 2011-02-20
      • 1970-01-01
      • 2016-06-24
      • 2017-01-18
      • 2015-08-25
      相关资源
      最近更新 更多