1

我有一个带有数据网格和按钮的简单窗体。数据网格中的项目绑定到的ObservableCollectioncustomer实现了INotifyPropertyChanged接口。每个客户都有一个deleted属性(类型bool)。我为客户默认视图设置了一个过滤器,以根据deleted属性过滤掉已删除的客户。到目前为止它的工作。当过滤器更改的项目属性时,Datagrid未更新

然后我添加一个标记选定的客户按钮被删除的事件。问题是在设置selected_customer.deleted = true后网格未更新。被删除的客户仍然可见。绑定到deleted属性的列正确更新。要从网格中删除客户,我必须手动调用客户默认视图的Refresh()方法。

为什么当我使用ObservableCollection和客户实现INotifyPropertyChanged接口时,datagrid不会自动更新?如何自动更新?

回答

0

我假设你使用CollectionViewSource进行过滤。 下面的代码将订阅对客户的已删除属性的更改,并在删除更改时刷新集合视图源。客户是Customer类的ObservableCollection。客户有一个名为Deleted的bool属性,并实现INotifyPropertyChanged。在填充Customers之前应调用InitAutoRefresh()。

private void InitAutoRefresh(ObservableCollection<Customer> observableCollection, CollectionViewSource collectionViewSource) 
{ 
    observableCollection.CollectionChanged += 
     (sender, e) => 
     { 
      foreach(Customer newItem in e.NewItems) 
      { 
       newItem.PropertyChanged += 
        (sender2, e2) => 
        { 
         if (e2.PropertyName == "Deleted") 
         { 
          collectionViewSource.View.Refresh(); 
         } 
        }; 
      } 
     }; 
} 

在填充可观察集合之前调用它。如果您在XAML中声明了collectionViewSource,则可以使用FindResource来获取实例。

InitAutoRefresh(Customers, FindResource("cvsCustomers") as CollectionViewSource); 
+0

这看起来像个好主意。谢谢。 – 2010-06-23 08:09:44

相关问题