简体   繁体   English

WP8 LongListMultiSelector无法删除所选项目

[英]WP8 LongListMultiSelector Can't Remove Selected Items

I have a LongListMultiSelector which is binded to an ObservableCollection. 我有一个LongListMultiSelector绑定到一个ObservableCollection。 When I select all items in the list and try to delete as so it starts failing and returns false after 35 successful removes. 当我选择列表中的所有项目并尝试删除时,它开始失败,并在成功删除35次后返回false。


        int failed = 0;
        while ((App.ViewModel.Queue.Count - failed)> 0)
        {
            //get playlist viewmodel
            bool success = App.ViewModel.Queue.Remove((ItemViewModel)QueueList.SelectedItems[0]);
            if (!success)
                failed++;
            System.Diagnostics.Debug.WriteLine("DELETING " + success);    
        }

If I do not include the check for failed items it gets stuck in an endless loop. 如果我不包括对失败项目的检查,它将陷入无限循环。 After the task completes, 35 of the 300 items are removed. 任务完成后,将删除300个项目中的35个。 If I re-run the task another 35 items get removed and the remaining fail... 如果我重新运行该任务,则另外35个项目将被删除,其余的将失败。

My Observable collection is defined like so 我的Observable集合的定义如下

      public ObservableCollection<ItemViewModel> Queue { get; set; }
      this.Queue = new ObservableCollection<ItemViewModel>();

In my xaml the MultiSelector is defined like this 在我的xaml中,MultiSelector的定义如下

      <toolkit:LongListMultiSelector
                x:Name="QueueList" 
                Margin="0,0,-12,0" 
                ItemsSource="{Binding Queue}"
                LayoutMode="List"
                SelectionChanged="QueueList_SelectionChanged">

How the Queue is populated (selected items from one list are copied to the Queue 如何填充队列(将一个列表中的选定项目复制到队列中

        foreach (ItemViewModel item in OriginalList.SelectedItems)
        {
            Boolean isQueued = false;
            foreach (ItemViewModel queueItem in App.ViewModel.Queue)
            {
                if (queueItem.Equals(item))
                {
                    isQueued = true;
                    break;
                }
            }
            ItemViewModel newItem = new ItemViewModel();
            newItem = item;

            if (!isQueued)
            {
                App.ViewModel.Queue.Add(newItem);
                for (int i = 0; i < ApplicationBar.MenuItems.Count; i++)
                {

                    ApplicationBarMenuItem menuItem = (ApplicationBarMenuItem)ApplicationBar.MenuItems[i];
                    if (menuItem.Text.Equals("clear queue") && !menuItem.IsEnabled)
                        menuItem.IsEnabled = true;
                }
            }
        }
        OriginalList.SelectedItems.Clear();
        DataSerializer.SaveQueue();
    }

Iterate array of SelectedItems and remove items one by one. 迭代SelectedItems数组,并逐一删除项。 Example: 例:

public void delete()
{
    while (Queue.SelectedItems.Count > 0)
        {
            Queue.ItemsSource.Remove(Queue.SelectedItems[0]);
        }
}

You can also use the Clear method, which will iterate over the array and unselect the selected items. 您还可以使用Clear方法,该方法将遍历数组并取消选择所选项目。

 private void Cancel_Selected(object sender, System.Windows.Input.GestureEventArgs e)
    {
        Queue.SelectedItems.Clear();       
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM