Как обновить LongListSelector после удаления элемента

У меня такой LongListSelector

<phone:longlistselector name="ListRecentFiles" layoutmode="Grid" itemssource="{Binding}" gridcellsize="140,140" selectionchanged="ListRecentFiles_SelectionChanged">

 <phone:longlistselector.itemtemplate>
 <datatemplate>
 <grid background="Red" margin="0,0,5,5">
 <textblock text="{Binding NoteTitle}">
 <toolkit:contextmenuservice.contextmenu>
 <toolkit:contextmenu x:name="ContextMenu">
 <toolkit:menuitem x:name="Delete" header="Delete" click="DeleteNote_Click">
 </toolkit:menuitem></toolkit:contextmenu>
 </toolkit:contextmenuservice.contextmenu>
 </textblock></grid>
 </datatemplate>
 </phone:longlistselector.itemtemplate>
 </phone:longlistselector>

это DataContext: public static ObservableCollection<note> NoteItems;</note>

И я пытаюсь удалить элемент из LongListSelector

private void DeleteNote_Click(object sender, RoutedEventArgs e)
{
 Note selectedNote = (sender as MenuItem).DataContext as Note;
 ListRecentFiles.ItemsSource.Remove(item);
 NoteItems.Remove(selectedNote);
}

Он не работает, за исключением того, что я перехожу на другую страницу XAML и возвращаю

Я посетил эту страницу, но не могу исправить ссылку

1 ответ

Не видя больше кода, трудно быть уверенным, что происходит не так. Но если вы настраиваете

ListRecentFiles.DataContext = NoteItems;

это неверно. Вы хотите установить

ListRecentFiles.ItemsSource = NoteItems;

Объявление XAML:

ItemSource="{Binding}"

Мог бы сделать это (в зависимости от остальной части кода). Как только.ItemsSource установлен правильно, тогда строка:

NoteItems.Remove(selectedNote);

Удастся удалить визуальный элемент из LongListSelector. В любом случае вы не должны делать линию:

ListRecentFiles.ItemsSource.Remove(item);

Это сделало бы неправильную вещь, когда список становится настолько большим, что он не все вписывается в память сразу.

licensed under cc by-sa 3.0 with attribution.