【发布时间】:2013-12-12 15:43:10
【问题描述】:
我有一个绑定到 ObservableCollection 的 LongListMultiSelector。当我选择列表中的所有项目并尝试删除时,它开始失败并在 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();
}
【问题讨论】:
标签: c# windows-phone-8 observablecollection