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 不刷新的任何想法。

4

1 回答 1

0

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

YourDataGrid.Items.Refresh();

它告诉您的数据网格返回到显示项目的任何源,并使用最新值刷新它们。这样,不会丢失任何“绑定”,只是按照您的预期进行刷新。

于 2012-11-19T02:38:36.133 回答