[英]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.