繁体   English   中英

WP8 LongListMultiSelector无法删除所选项目

[英]WP8 LongListMultiSelector Can't Remove Selected Items

我有一个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();
    }

迭代SelectedItems数组,并逐一删除项。 例:

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

您还可以使用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