0

Webサービスから最初の15個のオブジェクトのリストと、[次の15個のアイテムを読み込む]ボタンを表す追加のアイテムを取得してリストボックスにバインドするWindowsPhoneアプリを開発しています。最後の要素またはインデックス(ボタン)を選択したら、リストから最後のアイテム(ボタン)を削除し、サービスを再度呼び出して、次の15個のアイテムと、現在のリストに追加されるボタンアイテムを取得します。リストをクリアします。そして、リストボックスから最後の項目を選択するのと同じプロセスが続きます。私の問題は、最初のラウンドで正しく取得できることです。2回目のラウンドでは、次の15個の要素がリストに2回追加されます。本当の問題は何なのかわかりません。エラーや例外も発生していません。

以下は私がこれまでに行ったことです:

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 ハンドラーが 2 回目に 2 回呼び出されます。

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

おそらく、コードが 1 回だけ実行される別の場所にそのイベント ハンドラーを登録する必要があります。

于 2013-01-15T12:05:03.160 に答える