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

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

Другие вопросы по тегам