0

Listオブジェクトに格納されているToDoの単純なリストがあります。これは、データバインディングを介して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));

    }
}

何か案は?助けていただければ幸いです!

4

1 に答える 1

1

同じアイテムがリストボックス内の現在のアイテムにバインドされているときに、リストからアイテムを削除していることが問題である可能性があります。

これを回避する簡単な方法の1つは、リストの代わりにObservableCollectionを使用することです。コレクションは、INotifyCollectionChangedメカニズムを使用した削除についてリストボックスに通知します。

于 2012-07-06T08:53:13.033 に答える