2016-08-29 6 views
-2

Я пытаюсь очистить свой ObservableCollection MyTruckCollection от всех его предметов. Проблема заключается в том, что она не обновляет мой пользовательский интерфейс после того, как коллекция очистилась от всех элементов.Очистка ObservableCollection и уведомление UI

Я попытался очищая его следующими способами:

MyTruckCollection.Clear();

foreach (var item in MyTruckCollection.ToList()) 
    MyTruckCollection.Remove(item); 

Я попробовал этот метод расширения:

public static void RemoveAll<T>(this ObservableCollection<T> collection, Func<T, bool> condition) 
    { 
     for (int i = collection.Count - 1; i >= 0; i--) 
     { 
      if (condition(collection[i])) 
      { 
       collection.RemoveAt(i); 
      } 
     } 
    } 

И использовали его, как это:

MyTruckCollection.RemoveAll(x => x.TruckId != 0);

Все они удаляют все элементы, но мой пользовательский интерфейс не уведомляется об изменениях. Есть ли способ уведомить мой пользовательский интерфейс, когда я очищаю все данные в коллекции?

ПРИМЕЧАНИЕ. У меня также есть PropertyChanged, реализованный на моем MyTruckCollection.

+0

Спасибо за нижний план ... вы можете объяснить, почему? – CareTaker22

+0

После 'MyTruckCollection.Clear();' попробуйте написать 'RaisePropertyChanged (« MyTruckCollection »)' или 'OnPropertyChanged (« MyTruckCollection »);' – soydachi

+0

MyTruckCollection привязан к OneTime или OneWay в пользовательском интерфейсе? В '{Binding ...}' по умолчанию - OneTime, а в '{x: Bind ...}' по умолчанию - OneTime. – soydachi

ответ

0

Я нашел очень простое решение.

Проблема была в том, что я очищал все элементы в MyTruckCollection, но DataGrid, который я использовал, не был обновлен. Все элементы все еще отображались, которые были удалены.

Поэтому, чтобы исправить это, мне просто нужно было установить Item Item источника DataGrid на очищенный MyTruckCollection после того, как я очистил коллекцию, и DataGrid был очищен.

MyTruckCollection.Clear(); 
dgViewProjects.ItemsSource = MyTruckCollection;