C# Can';t通过ContextMenu从ObservableCollection中删除项
我有一个名为C# Can';t通过ContextMenu从ObservableCollection中删除项,c#,xaml,windows-phone-8,C#,Xaml,Windows Phone 8,我有一个名为MyClass和Location的类的程序MyClass包含Location项的ObservableCollection,并且Location包含名为Name的字符串属性。在MainPage.xaml中,我有一个LongListSelector(每个项目都有一个ContextMenu),其中填充了表示位置的网格 当我从上下文控件中单击“删除”菜单项时,它通常会删除底层的位置对象并更新视图。在填充LongListSelector并删除其所有项目的几个周期后,无法再删除添加的一些新项目
MyClass
和Location
的类的程序MyClass
包含Location
项的ObservableCollection
,并且Location
包含名为Name
的字符串属性。在MainPage.xaml
中,我有一个LongListSelector
(每个项目都有一个ContextMenu
),其中填充了表示位置的网格
当我从上下文控件中单击“删除”菜单项时,它通常会删除底层的位置
对象并更新视图。在填充LongListSelector
并删除其所有项目的几个周期后,无法再删除添加的一些新项目
我的意思是:LLS最初包含两个项目。然后我删除这两项,再添加3项。但是,在本例中,我只能删除第三个,而不能删除前2个
这是ContextMenu
MenuItem
单击MainPage.xaml.cs
中的事件:
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;
}
}
}
有任何解决此问题的建议吗?如果您没有使用分组选项,我建议您使用列表框而不是LLS。它工作得更好,产生的问题更少。
顺便说一下,我也遇到了这个控件的问题-可能与您的类似。
奇怪的是,LLS.UpdateLayout()在ListBox中无法正常工作。如果您不使用分组选项,我建议您使用ListBox而不是LLS。它工作得更好,产生的问题更少。
顺便说一句,我也遇到了这个控件的问题-可能与您的类似。
奇怪的是,LLS.UpdateLayout()在ListBox中无法正常工作。我假设DataContext实际上是位置中的一个项?在这种情况下,您应该能够使用类似于MyClass.Locations.remove(selectedItem)
的方法从集合中删除项,而不是使用for循环。我已经尝试过了,但不幸的是,我仍然遇到了相同的问题。您能详细说明不能再删除了吗?您仍然可以打开关联菜单吗?您是否尝试在条件处设置断点以查看名称是否因任何原因不匹配?ContextMenu仍会显示。我设置了一个断点,结果显示selectedItem
为空。@第三个-您可以尝试用ListBox替换LLS,并检查是否存在相同的问题吗?我假设DataContext实际上是来自这些位置的项?在这种情况下,您应该能够使用类似于MyClass.Locations.remove(selectedItem)
的方法从集合中删除项,而不是使用for循环。我已经尝试过了,但不幸的是,我仍然遇到了相同的问题。您能详细说明不能再删除了吗?您仍然可以打开关联菜单吗?您是否尝试在条件处设置断点以查看名称是否因任何原因不匹配?ContextMenu仍会显示。我设置了一个断点,结果显示selectedItem
为空。@第三个-您能否尝试用ListBox替换LLS,并检查是否存在相同的问题?
var toRemove = MyClass.Locations.Where(x => x.Name == selectedItem.Name).SingleOrDefault();
MyClass.Locations.Remove(toRemove);