簡體   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