如何将单个项添加到observablecollection

时间:2012-04-06 02:52:58

标签: c# windows-phone-7 observablecollection

我在使用ObservableCollection的Add方法时遇到麻烦,只需在click事件中向observablecollection添加新的字符串值。我在一个Settings.cs类中创建了我的ObservableCollection,然后在我的wp7.1项目中的多个页面中引用了observablecollection。当我需要将一个observablecollection的几个项添加到另一个时,该系统已经完美地工作,要么设置一个等于另一个,要么根据所需的目的使用.Union。但在这种情况下,我试图将单个字符串项添加到类型为string的ObservableCollection中。我的代码如下

Settings.cs

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

Favorites.xaml

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

FavoritesPage.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,但也没用。请帮助这似乎是一个简单的解决方案,但我无法弄清楚这一点!提前谢谢!

1 个答案:

答案 0 :(得分: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检查。