返回包含List的页面时ArgumentOutOfRangeException

时间:2012-07-05 16:22:19

标签: windows-phone-7 list exception data-binding

我有一个简单的todo列表,它存储在List-object中,通过数据绑定通过ListBox显示。这些项目是可点击的,它们会将您带到详细信息页面,您也可以在其中删除该任务。一切都很好,但当我点击后退按钮时,我得到一个ArgumentOutOfRangeException并且应用程序崩溃。

现在,我收集这是因为该应用认为列表仍然有项目,但我不太确定如何解决它。

System.Windows.dll引发异常 - 没有什么特别的。另外,我知道在OnNavigatedTo-event之后会引发异常。

XAML(只是列表框 - 有点简化):

<ListBox Name="MyActivitiesList" ItemsSource="{Binding MyActivities}" SelectionChanged="ListBox_SelectionChanged">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <ListBoxItem>
                <StackPanel Margin="0,0,0,12">
                    <-- context menu was here, but has been removed -->
                    <TextBlock Text="{Binding Title}" Style="{StaticResource BigHeader}"/>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Category.Name}" Style="{StaticResource SubtleText}"/>
                        <TextBlock Text=" - " Style="{StaticResource SubtleText}"/>
                        <TextBlock Text="{Binding VotesPercentage}" Style="{StaticResource SubtleText}"/>
                        <TextBlock Text="% positive" Style="{StaticResource SubtleText}" />
                    </StackPanel>
                </StackPanel>
            </ListBoxItem>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox> 

代码隐藏:

private MyActivitiesViewModel myActivitiesViewModel;

public MyActivitiesView()
{
    InitializeComponent();
}

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    myActivitiesViewModel = new MyActivitiesViewModel();
    this.DataContext = myActivitiesViewModel;
    base.OnNavigatedTo(e);
}

protected override void OnNavigatingFrom(System.Windows.Navigation.NavigatingCancelEventArgs e)
{
    MyActivitiesList.SelectedItem = null;
    base.OnNavigatingFrom(e);
}

private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (((ListBox)sender).SelectedItem != null)
    {
        var idea = ((ListBox)sender).SelectedItem as Idea;
        ((ListBox)sender).SelectedItem = null;

        Dispatcher.BeginInvoke(() => NavigationUtility.Navigate(new Uri("/View/IdeaView.xaml", UriKind.Relative), idea));

    }
}

有什么想法吗?非常感谢帮助!

1 个答案:

答案 0 :(得分:1)

我认为问题可能是您要从列表中删除项目,而该项目绑定到列表框中的当前项目。

解决此问题的一种简单方法是使用ObservableCollection而不是List - 集合将使用INotifyCollectionChanged机制告诉列表框任何删除。