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 の拡張メソッドです。

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 が更新されていないことです。行は、実際には ObservableCollection に存在しない場合でも、DataGrid に残ります。Datagrid が更新されない理由を教えてください。

4

1 に答える 1

0

行の値に変更を適用しても、まったく同じことに遭遇しました。それ以外の場合、私が見つけた解決策は非常に簡単でした...

YourDataGrid.Items.Refresh();

データグリッドに、アイテムが表示されているソースに戻り、最新の値が何であれそれらを更新するように指示します。このようにして、「バインディング」が失われることはなく、期待どおりに更新されるだけです。

于 2012-11-19T02:38:36.133 に答える