Количество новых элементов в списке WPF

У меня есть listbox и его источник привязан к XmlDataProvider, и RSS-ссылка на источник XmlDataProvider, Это все работает правильно, получать каналы и отображать их в listbox, у меня есть DispatcherTimer в коде, который Обновить XmlDataProvider Источник каждые 10 минут. Теперь все, что мне нужно, это подсчитать новые элементы, добавленные в ListBox в каждом интервале обновления.

Может ли кто-нибудь помочь мне реализовать способ подсчета только новых элементов, добавленных в список в каждом интервале времени обновления? Пожалуйста помоги.

1 ответ

Я согласен с тем, что "перед добавлением предмета в список считайте его. - Shujaat Siddiqui", но вы также можете добавить Linq или For cicle, чтобы проверить, существует ли ID предмета, и сосчитать уникальные. Что-то вроде:

int NewItemsCount = 0;
for (int i = 0; i<XmlDataProvider.Items.Count; i++)
{
    bool IsOld=false;
//Loop throu all items in existing
    for (int o =0; i<NewData.Items.Count;i++)
    {
        if(XmlDataProvider.Items[i].ID==NewData.Items[o].ID)
        {
            IsOld = true;
            break;
        }
    }
    if(!IsOld)
    {
         NewItemsCount++;
    }
}

Более подробный:

В первый раз, когда вы получаете новости, вы делаете что-то вроде этого:

Например, у вас есть модель для ваших новостей:

class Item
{
    string guid;
    string title;
    ...
}

И вы получаете ваши новости как:

Список новостей = XML.Deserialize(response.GetResponse()) // не запоминается по памяти, но это ваш ответ с десериализацией сервера с использованием десериализатора XML

Затем вы заполняете свой ListBox новостями List, например:

 ListBox.DataSource = news OR using for/forin and ListBox.Items.Add();

Теперь вы получаете обновление с сервера:

Список новостей = XML.Deserialize(response.GetResponse()) // не запоминается по памяти, но это ваш ответ с десериализацией сервера с использованием десериализатора XML

Теперь вы должны проверить, сколько новых элементов было добавлено (перед добавлением новых элементов в ListBox), вы должны сделать что-то вроде:

а) если вы использовали ListBox.DataSource = news

 List<Item> OldNews = (List<Item>)ListBox.DataSource;
 int newUniqueNewsCount = 0;
 foreach ( Item newObj in news ) // loop through new items that you just got as update from server
 {
      bool IsOld = false;
      foreach ( Item obj in OldNews) // loop through old items
      {
           if(obj.guid==objNew) //check if this GUID already existed
           {
               IsOld = true;
               break; //end the looping
           }
      }
      if(!IsOld)
      {
           // If code ran in here then this GUID is new and then this news is new so +1
           newUniqueNewsCount ++;
      }
 }

После запуска этого кода вы можете использовать newUniqueNewsCount для отображения количества новых элементов в пользовательском интерфейсе.

Другие вопросы по тегам