wpf datagrid - 从ObservableCollection中删除项目时,Datagrid不会刷新

时间:2012-11-19 02:13:46

标签: wpf wpf-4.0

我有一个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无法刷新的想法。

1 个答案:

答案 0 :(得分:0)

即使对行值应用更改,我也遇到了同样的事情。我找到的解决方案非常简单,否则......

YourDataGrid.Items.Refresh();

它告诉你的datagrid回到它显示的项目的任何来源,并用最新的值刷新它们。这样,就不会丢失“绑定”,只会像你期望的那样刷新。