1

リストの項目をクリックすると、選択インデックスの変更が 2 回発生するのはなぜでしょうか。

これは、selectionindexchanged で使用するコードです。

 private void listBoxFolders_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        // Taking the name of the folder to pass in the parameters
        if ((Folder)listBoxFolders.SelectedItem != null)
        {
            folderTmp = (Folder)listBoxFolders.SelectedItem;
        }

        // Connection to the webservice to get the subfolders and also the files
        WebClient wc = new WebClient();
        wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted2);
        wc.DownloadStringAsync(new Uri("http://clients.uicentric.net/IISHostedCalcService/FilesService.svc/GetFoldersAndFiles?selectedFolder=" + folderTmp.Name));
    }

そして、これはその中で2回起動しているメソッドです:

 public void wc_DownloadStringCompleted2(object sender, DownloadStringCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            XDocument xdoc = XDocument.Parse(e.Result, LoadOptions.None);
            XNamespace aNamespace = XNamespace.Get("http://schemas.datacontract.org/2004/07/System.IO");

            try
            {

                // Retrieving the subfolders
                var folders = from query in xdoc.Descendants(aNamespace.GetName("DirectoryInfo"))
                              select new Folder
                              {
                                  Name = (string)query.Element("OriginalPath"),
                              };

                _lFolders = new ObservableCollection<Folder>();

                foreach (Folder f in folders)
                {
                    LFolders.Add(f);
                }

                listBoxFolders.ItemsSource = LFolders;
                listBoxFolders.DisplayMemberPath = "Name";


                // Retrieving the files
                var files = from query in xdoc.Descendants(aNamespace.GetName("FileInfo"))
                            select new File
                         {
                             Name = (string)query.Element("OriginalPath"),
                         };


                _lFiles = new ObservableCollection<File>();

                foreach (File f in files)
                {

                    LFiles.Add(f);
                }

                listBoxFiles.ItemsSource = LFiles;
                listBoxFiles.DisplayMemberPath = "Name";
                listBoxFiles.SelectionChanged += new SelectionChangedEventHandler(listBoxFiles_SelectionChanged);

            }
            catch { }

        }

    }
4

1 に答える 1

3

選択が変更されたイベントで、リストボックスの項目ソースをリロードしています。reload アクションのために、インデックスはデフォルト値、つまり -1 に変更されます。これはおそらくあなたの問題に違いありません。選択変更イベントを使用する代わりに、Tap イベントを使用します。

于 2012-04-17T09:59:26.230 に答える