0

我无法使用 ObservableCollection 的 Add 方法在单击事件时简单地将新字符串值添加到 observablecollection。我在 Settings.cs 类中创建我的 ObservableCollection,然后在我的 wp7.1 项目的多个页面中引用该 observablecollection。当我需要将一个 observablecollection 的多个项目添加到另一个时,该系统非常有效,或者将一个设置为另一个,或者使用 .Union,具体取决于所需的目的。不过,在这种情况下,我试图将单个字符串项添加到我的字符串类型的 ObservableCollection 中。我的代码如下

设置.cs

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

收藏夹.xaml

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

收藏夹页面.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));
    }

在FavoritesPage.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 回答