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