删除项目后如何刷新LongListSelector

时间:2013-11-23 03:44:31

标签: windows-phone-8 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页面并返回

之外,它不起作用

我访问过此页但无法修复link

1 个答案:

答案 0 :(得分:4)

如果没有看到更多代码,很难确定出现了什么问题。但是如果你正在设置

ListRecentFiles.DataContext = NoteItems;

这是不正确的。你想设置

ListRecentFiles.ItemsSource = NoteItems;

XAML声明:

ItemSource="{Binding}"

可以这样做(取决于代码的其余部分)。一旦.ItemsSource设置正确,那么行:

NoteItems.Remove(selectedNote); 

应该成功从LongListSelector中删除可视项目。无论如何,你不应该这样做:

ListRecentFiles.ItemsSource.Remove(item);

当列表变得如此之大以至于它不能同时存储在内存中时,这会做错事。