Количество новых элементов в списке 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 для отображения количества новых элементов в пользовательском интерфейсе.