Как обновить 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}" Style="{Binding PhoneTextNormalStyle}" />
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu x:Name="ContextMenu">
<toolkit:MenuItem x:Name="Delete" Header="Delete" Click="DeleteNote_Click" />
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
</Grid>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
это DataContext: public static ObservableCollection<Note> NoteItems;
И я пытаюсь удалить элемент из 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);
Это сделало бы неправильную вещь, когда список становится настолько большим, что он не помещается в память сразу.