计算WPF列表框中的新项目

时间:2014-09-04 05:30:28

标签: c# wpf listbox xmldataprovider

我有一个listbox,它的来源被绑定为XmlDataProvider。以及XmlDataProvider来源的RSS链接。这一切都正常,获取提要并在listbox中显示它们。我在代码中有一个DispatcherTimer,每隔10分钟刷新一次XmlDataProvider来源。现在我需要的是计算每个刷新间隔中ListBox中添加的新项目。

任何人都可以帮我实现一种方法,只计算每个刷新时间间隔中列表框中添加的新项目吗?请帮助。

1 个答案:

答案 0 :(得分:0)

我同意“在添加项目到列表之前计算它。 - Shujaat Siddiqui”,但你也冷添加Linq或For cicle,检查项目的ID是否已经存在,并计算唯一的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;
    ...
}

你得到的消息如下:

列表news = XML.Deserialize(response.GetResponse())//无法通过内存记住,但这是您使用XML反序列化器反序列化服务器的响应

然后使用List新闻填充ListBox,如下所示:

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

现在您从服务器获得更新:

列表news = XML.Deserialize(response.GetResponse())//无法通过内存记住,但这是您使用XML反序列化器反序列化服务器的响应

现在您应该检查添加了多少新项目(在向ListBox添加新项目之前),您应该执行以下操作:

a)如果您使用了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在UI中显示新项目数。