Как обновить 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.