WP8 LongListMultiSelector无法删除所选项

时间:2013-12-12 15:43:11

标签: c# windows-phone-8 observablecollection

我有一个LongListMultiSelector绑定到ObservableCollection。当我选择列表中的所有项目并尝试删除时,它会开始失败并在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);    
        }

如果我不包括对失败项目的检查,它会陷入无限循环。任务完成后,将删除300个项目中的35个。如果我重新运行该任务,则会删除另外35个项目,其余项目将失败...

我的Observable集合定义如此

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

在我的xaml中,MultiSelector定义如下

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

如何填充队列(将一个列表中的选定项目复制到队列

        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();
    }

2 个答案:

答案 0 :(得分:0)

迭代SelectedItems数组并逐个删除项目。例如:

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

答案 1 :(得分:0)

您还可以使用Clear方法,它将迭代数组并取消选择所选项。

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