【问题标题】:Reloading listbox in WP7在 WP7 中重新加载列表框
【发布时间】:2011-12-07 09:36:51
【问题描述】:

我正在使用List绑定一个列表框,如下:

<ListBox x:Name="ContentPanel" SelectionChanged="onSelectionChanged" Background="LightGray" Grid.Row="2">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid Name="{Binding title}" Height="165" Margin="25,5,25,0" Width="430">
                    <Border BorderThickness="1"   Height="165"  BorderBrush="Gray">
                        <toolkit:ContextMenuService.ContextMenu >
                            <toolkit:ContextMenu IsZoomEnabled="False">
                                <toolkit:MenuItem Name="Delete" Header="Delete Message" Click="DeleteMessage_Click"  >

                                </toolkit:MenuItem>
                            </toolkit:ContextMenu>
                        </toolkit:ContextMenuService.ContextMenu>
                        <StackPanel Orientation="Vertical">
                            <StackPanel>
                                <TextBlock Text="{Binding title}" Margin="5,0,0,0" FontSize="25" Foreground="Black"/>
                                <TextBlock Text="{Binding msgFrom}" Padding="5" TextWrapping="Wrap" Foreground="Gray" FontSize="20"/>

                            </StackPanel>

                            <StackPanel Orientation="Horizontal">
                                <TextBlock  Margin="5,13,0,0" FontSize="24" Foreground="WhiteSmoke" Text="{Binding msgReceivedOn}"/>
                                <toolkit:ToggleSwitch Margin="170,10,0,0" IsChecked="{Binding msgStatus}" Unchecked="UnChecked"  Background="LightBlue" Checked="Checked"/>
                            </StackPanel>
                        </StackPanel>
                    </Border>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

首先数据加载成功。但是当我使用 Contextmenu 删除项目并重新加载列表框时..它会引发异常。处理上下文菜单点击的代码是:

private void DeleteMessage_Click(object sender, RoutedEventArgs e)
    {
        MenuItem item = sender as MenuItem;
        Message message = (Message)item.DataContext;
        MessageBoxResult result = MessageBox.Show("Are you sure to delete the message??", "Confirmation", MessageBoxButton.OKCancel);
        if (result == MessageBoxResult.Cancel)
            return;      

 else
        {
           ContentPanel.Items.Remove(message);
             lstMessage.Remove(message);
        }
            ContentPanel.ItemSource = lstMessage;
    }

但是这段代码不起作用。那么有什么建议吗?

【问题讨论】:

    标签: windows-phone-7 data-binding listbox


    【解决方案1】:

    您不需要每次都将集合绑定到列表。此外,当您从收藏中删除一个项目时,它也应该在列表中消失(如果绑定设置正确)。我认为您没有 ObservableCollection,因此您需要手动管理项目。请考虑使用 ObservableCollection。

    您的代码应如下所示:

     lstMessage.Remove(message); //it must raises CollectionChanged event automatically
    

    而且这行是不必要的:

     ContentPanel.Items.Remove(message);
    
     ContentPanel.ItemSource = lstMessage;
    

    【讨论】:

      猜你喜欢
      • 2012-03-29
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多