【发布时间】:2013-12-01 14:26:49
【问题描述】:
我有一个程序,其类名为 MyClass 和 Location。 MyClass 包含一个 ObservableCollection 的 Location 项,Location 包含一个名为 Name 的字符串属性。在MainPage.xaml 中,我有一个LongListSelector(每个项目都有一个ContextMenu),其中填充了代表Location 的网格。
当我从上下文控件中单击“删除”菜单项时,它通常会删除底层的Location 对象并更新视图。在填充LongListSelector 并删除其所有项目的几个周期后,一些新添加的项目无法再删除。
这是我的意思的一个例子:LLS 最初包含 2 个项目。然后我删除这 2 个项目并添加 3 个。但是,在这种情况下,我只能删除第三个,但不能删除第一个。
这是来自MainPage.xaml.cs的ContextMenuMenuItem点击事件:
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
var selectedItem = (sender as MenuItem).DataContext as Location;
for (int i = 0; i < MyClass.Locations.Count; i++)
{
if (MyClass.Locations[i].Name == selectedItem.Name)
{
MyClass.Locations.Remove(MyClass.Locations[i]);
break;
}
}
}
在使用 for 循环之前,我使用了这个 LINQ 代码,但仍然遇到同样的问题:
var toRemove = MyClass.Locations.Where(x => x.Name == selectedItem.Name).SingleOrDefault();
MyClass.Locations.Remove(toRemove);
有解决这个问题的建议吗?
【问题讨论】:
-
我假设 DataContext 实际上是 Locations 中的一个项目?在这种情况下,您应该能够使用
MyClass.Locations.Remove(selectedItem)之类的东西从集合中删除项目,而不是 for 循环。 -
我已经尝试过了,但不幸的是,我仍然遇到了同样的问题。
-
你能详细说明
can't be removed anymore吗?您仍然可以打开上下文菜单吗?您是否尝试在条件处设置断点以查看名称是否由于某种原因不匹配? -
上下文菜单仍然出现。我设置了一个断点,结果
selectedItem为空。 -
@pcnThird - 你可以尝试用 ListBox 替换 LLS 并检查你是否有同样的问题?
标签: c# xaml windows-phone-8