我有一个listbox
,它的来源被绑定为XmlDataProvider
。以及XmlDataProvider
来源的RSS链接。这一切都正常,获取提要并在listbox
中显示它们。我在代码中有一个DispatcherTimer
,每隔10分钟刷新一次XmlDataProvider
来源。现在我需要的是计算每个刷新间隔中ListBox
中添加的新项目。
任何人都可以帮我实现一种方法,只计算每个刷新时间间隔中列表框中添加的新项目吗?请帮助。
答案 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中显示新项目数。