0

我正在开发一个 Windows 手机应用程序,我想从我的 Web 服务中获取前 15 个对象的列表以及一个额外的项目来表示“加载下一个 15 个项目按钮”并将其绑定到列表框。在选择最后一个元素或索引(按钮)时,我想从列表中删除最后一个项目(按钮)并再次调用服务以获取接下来的 15 个项目加上将再次添加到当前列表中的按钮项目清除列表。当我们从列表框中选择最后一项时,同样的过程会继续进行。我的问题是我能够在第一轮中正确获得它。在第二轮中,将接下来的 15 个元素添加到列表中两次。我不知道真正的问题是什么。我也没有收到任何错误或异常。

以下是我到目前为止所做的:

private void ListBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {

        int LastIndex=app.imgItem.Count - 1;
        if (ListBox1.SelectedIndex == LastIndex)
        {
            app.imgItem.Remove(app.imgItem[app.imgItem.Count-1]);
            proxy.SelectNextItemsCompleted += new EventHandler<ServiceReference1.SelectNextItemsCompletedEventArgs>(proxy_SelectNextItemsCompleted);
            int id = app.imgItem.Last().Id;
            proxy.SelectNextItemsAsync(categoryID, id);
        }

    }

void proxy_SelectNextItemsCompleted(object sender, ServiceReference1.SelectNextItemsCompletedEventArgs e)
    {
        if (e.Error != null)
        {
            MessageBox.Show("Cannot load data.");
            return;
        }
        else
        {
                foreach (var item in e.Result)
                {
                    ImgData idata = new ImgData();
                    idata.CategoryID = item.CategoryID;
                    idata.ImageID = item.ImageID;
                    idata.ImageTitle = item.ImageTitle;
                    idata.Thumbnail = item.Thumbnail;
                    app.imgItem.Add(idata);
                }
        }
        ImageData btnData = new ImageData();
        btnData.CategoryID = 0;
        btnData.ImageID = 0;
        btnData.ImageTitle = "";
        btnData.Thumbnail = "Images/loadButton.jpg";
        app.imgItem.Add(btnData);
        ListBox1.ItemsSource = app.imgItem;
    }
4

1 回答 1

0

看起来您在 SelectionChanged 事件处理程序中重新注册了一个事件处理程序,因此,SelectNextItemsCompleted 处理程序可能第二次被调用两次:

proxy.SelectNextItemsCompleted += new EventHandler<ServiceReference1.SelectNextItemsCompletedEventArgs>(proxy_SelectNextItemsCompleted);

您可能应该在代码只运行一次的其他地方注册该事件处理程序。

于 2013-01-15T12:05:03.160 回答