0

ObservableCollectionのAddメソッドを使用して、クリックイベント時にobservablecollectionに新しい文字列値を追加するのに問題があります。Settings.csクラスでObservableCollectionを作成し、wp7.1プロジェクトの複数のページでそのobservablecollectionを参照します。このシステムは、必要な目的に応じて、1つのobservablecollectionの複数のアイテムを別のアイテムに追加する必要がある場合に、1つを他のアイテムと等しく設定するか、.Unionを使用して完全に機能します。ただし、この場合、string型のObservableCollectionに単一の文字列アイテムを追加しようとしています。私のコードは次のとおりです

Settings.cs

public static Setting<ObservableCollection<string>> Favorites = new Setting<ObservableCollection<string>>("Favorites", null);

Favorite.xaml

<ListBox x:Name="FavoritesListBox" Grid.Row="1" ItemsSource="{Binding}" Margin="12,0,12,0"
             SelectionChanged="FavoritesListBox_SelectionChanged">

FavoritePage.xaml.cs

protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        string favorUrl = null;
        NavigationContext.QueryString.TryGetValue("curUrl", out favorUrl);
        if (favorUrl != null )
        {
            //This works but the FavoritesListBox items are cleared upon new page navigation or closing
            //this.FavoritesListBox.Items.Add(favorUrl);

            //This does not work!?
            //if (Settings.Favorites.Value == null)
            //{
            //    //Settings.Favorites.Value.Add(favorUrl);
            //}
            //else
            //{
            //    Settings.Favorites.Value.Add(favorUrl);
            //}                     
        }

        //base.OnNavigatedTo(e);
    }

private void FavoritesListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        this.NavigationService.Navigate(new Uri("/MainPage.xaml?favUrl=" + e.AddedItems[0], UriKind.Relative));
    }

FavoritePage.xaml.csで.Addメソッドを使用してもコーディングエラーは発生しませんが、デバッグ時にNullReferenceExceptionが発生します。また、.Insertを使用してみましたが、それも機能しませんでした。これは簡単な修正のようですが、私はこれを理解することができませんでした!前もって感謝します!

4

1 に答える 1

2

nullであることを確認した後、オブジェクトを参照していnullます。

if (Settings.Favorites.Value == null)
{
  Settings.Favorites.Value.Add(favorUrl);  // throws NullReferenceException 
                                           // because Value is null
}

これを行う必要があります:

if (Settings.Favorites.Value == null)
{
  Settings.Favorites.Value = new ObservableCollection<string>();
}
Settings.Favorites.Value.Add(favorUrl);

または、初期化を次のように変更できます。

public static Setting<ObservableCollection<string>> Favorites = 
    new Setting<ObservableCollection<string>>("Favorites", null);

public static Setting<ObservableCollection<string>> Favorites = 
    new Setting<ObservableCollection<string>>("Favorites", 
      new ObservableCollection<string>());

このようにして、nullチェックを回避できます。

于 2012-04-06T03:02:18.083 に答える