无法通过上下文菜单从可观察集合中删除项目



我有一个程序,里面有一个名为MyClassLocation的类。 MyClass包含Location项的ObservableCollectionLocation包含一个名为 Name 的字符串属性。MainPage.xaml我有一个LongListSelector(每个项目都有一个ContextMenu),填充了代表Location的网格。

当我从上下文控件中单击"删除"菜单项时,它通常会删除基础Location对象并更新视图。在填充LongListSelector并删除其所有项目的几个周期后,无法再删除添加的一些新项目。

以下是我的意思的一个例子:LLS 最初包含 2 个项目。然后我删除了这 2 个项目并添加了 3 个。但是,在这种情况下,我只能删除第三个,但不能删除前两个。

以下是来自MainPage.xaml.csContextMenu MenuItem点击事件:

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);

有什么建议可以解决这个问题吗?

我建议您使用ListBox而不是LLS - 如果您不使用分组选项。它的效果要好得多,造成的问题也更少。
顺便说一下,我也遇到了这个控件的一些问题 - 可能与您的控件相似。
奇怪的是,LLS。UpdateLayout() 在 ListBox 中无法正常工作。

最新更新