我有一个带有datagrid和按钮的简单表单。数据网格中的项目绑定到ObservableCollection
的{{1}}。 customers
实现customer
接口。每个客户都有INotifyPropertyChanged
属性(类型为bool)。我为客户默认视图设置了一个过滤器,以根据deleted
属性过滤掉已删除的客户。到目前为止它的确有效。
然后我为按钮添加一个事件,将所选客户标记为已删除。问题是在设置deleted
后网格未更新。删除的客户仍然可见。绑定到selected_customer.deleted = true
属性的列正确更新。要从网格中删除客户,我必须手动调用客户默认视图的deleted
方法。
为什么当我使用Refresh()
并且客户实现ObservableCollection
接口时,datagrid不会自动更新?如何让它自动更新?
答案 0 :(得分:0)
我假设您使用CollectionViewSource进行过滤。 下面的代码将订阅对客户的已删除属性的更改,并在已删除更改时刷新collectioviewsource。客户是Customer类的ObservableCollection。 Customer有一个名为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);