【问题标题】:how to add single item to observablecollection如何将单个项目添加到 observablecollection
【发布时间】:2012-04-06 11:07:44
【问题描述】:

我无法使用 ObservableCollection 的 Add 方法在单击事件时简单地将新字符串值添加到 observablecollection。我在 Settings.cs 类中创建我的 ObservableCollection,然后在我的 wp7.1 项目的多个页面中引用该 observablecollection。当我需要将一个 observablecollection 的多个项目添加到另一个时,该系统非常有效,或者将一个设置为另一个,或者使用 .Union,具体取决于所需的目的。不过,在这种情况下,我试图将单个字符串项添加到我的字符串类型的 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 ,但也没有用。请帮助这似乎是一个简单的解决方案,但我无法弄清楚这一点!提前致谢!

【问题讨论】:

    标签: c# windows-phone-7 observablecollection


    【解决方案1】:

    在确认它是 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检查。

    【讨论】:

    • 真棒@Prætorian 工作得很好。我不敢相信我以前没有看到。无论哪种方式,我都希望其他人发现您的意见和我一样有用和有益。
    猜你喜欢
    • 2017-07-30
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多