0

我有一个listbox,它的源绑定到一个XmlDataProvider. 和一个 RSS 链接的来源XmlDataProvider。一切正常,获取提要并在listbox. 我在代码中有一个每 10 分钟DispatcherTimer刷新一次源的代码。XmlDataProvider现在我只需要计算ListBox在每个刷新间隔中添加的新项目。

谁能帮我实现一种方法来计算每个刷新时间间隔中列表框中添加的新项目?请帮忙。

4

1 回答 1

0

我同意“在将项目添加到列表之前对其进行计数。-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;
    ...
}

你会得到这样的消息:

List news = XML.Deserialize(response.GetResponse()) // 无法记忆,但这是您使用 XML 反序列化器反序列化的服务器响应

然后你用 List 新闻填充你的 ListBox,像这样:

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

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

List 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 中显示新项目数。

于 2014-09-04T06:13:18.753 回答