我有一个ObservableCollection定义如下
private ObservableCollection<RelayConfig> _relayConfigs;
public ObservableCollection<RelayConfig> RelayConfigs {
get {return _relayConfigs;}
set { _relayConfigs = value; }
}
这与使用ItemsSource属性的wpf Datagrid绑定并填充如下所示
RelayConfigs = new ObservableCollection<RelayConfig>(unitOfWork.RelayConfigRepository.GetQueryable().Include(rc => rc.StandardContacts));
我正在从ObservableCollection中删除与此类特定条件匹配的项目。
RelayConfigs.RemoveWhere(r => r.IsMarked);
RemoveWhere是ObservableCollection的Extension方法,定义如下
public static void RemoveWhere<T>(this ICollection<T> collection, Func<T, bool> predicate) {
var i = collection.Count;
while (i-- > 0) {
var element = collection.ElementAt(i);
if (predicate(element)) {
collection.Remove(element);
}
}
}
问题是当我使用上面的设置从ObservableCollection中删除一些行时,我没有看到DataGrid被刷新。行仍然在DataGrid中停留,而实际上它在ObservableCollection中不存在。任何有关Datagrid无法刷新的想法。
答案 0 :(得分:0)
即使对行值应用更改,我也遇到了同样的事情。我找到的解决方案非常简单,否则......
YourDataGrid.Items.Refresh();
它告诉你的datagrid回到它显示的项目的任何来源,并用最新的值刷新它们。这样,就不会丢失“绑定”,只会像你期望的那样刷新。