如何在ObservableCollection中的特定索引处获取元素

时间:2012-09-23 03:22:56

标签: c# windows-phone-7 observablecollection

我正在尝试制作标签式浏览器代码示例,但我无法正确地解决该问题。我创建了一个自定义类BrowserItem,它有两个值,我的自定义Web浏览器和url字符串。然后我创建了一个BrowserItem类型的ObservableCollection,在其中我在click事件上向ObservableCollection添加新项。出于某种原因,当我在我的MainPage中调用我的ShowTab方法来显示用户选择的Web浏览器实例时(从ObservableCollection填充的ListBox),我得到一个ArgumentOutOfRange异常。为了说明,我到目前为止的内容如下:

BrowserItem.cs

public FullWebBrowser browser
    {
        get;
        set;
    }

    public string url
    {
        get;
        set;
    }  

Settings.cs

public static Setting<ObservableCollection<BrowserItem>> Browsers = new Setting<ObservableCollection<BrowserItem>>("Browsers", new ObservableCollection<BrowserItem>());

上面的Setting类保存并从隔离存储中获取ObservableCollection。

MainPage.xaml.cs中

private void ShowTab(int index) 
    {
        this.currentIndex = index;
        //Settings.Browsers.Value.ElementAt(currentIndex);  //ArgumentOutOfRange exception
        int count = Settings.Browsers.Value.Count;

        if (count <= 0)
        {                
            FullWebBrowser browser = new FullWebBrowser();
            browser.InitialUri = "http://www.bing.com";

            BrowserItem Browser = new BrowserItem();
            Browser.browser = browser;
            Browser.url = browser.InitialUri;
            Settings.Browsers.Value.Add(Browser);
            BrowserHost.Children.Add(Browser.browser);
        }

        //SearchBar.Text = Settings.Browsers.Value.ElementAt(currentIndex).url ?? "";

        if (Settings.Browsers.Value.ElementAt(currentIndex) == null)  //ArgumentOutOfRangeException
        {
            FullWebBrowser browser = new FullWebBrowser();
            browser.InitialUri = "http://www.bing.com";

            BrowserItem Browser = new BrowserItem();
            Browser.browser = browser;
            Browser.url = browser.InitialUri;
            Settings.Browsers.Value.Add(Browser);
            BrowserHost.Children.Add(Browser.browser);
        }

        for (int i = 0; i < Settings.Browsers.Value.Count; i++)
        {
            if (Settings.Browsers.Value.ElementAt(i) != null)
            {
                Settings.Browsers.Value.ElementAt(i).browser.Visibility = i == this.currentIndex ? Visibility.Visible : Visibility.Collapsed;
            }
        }
    }

ArgumentOutOfRangeException首先出现在Settings.Browsers.Value.ElementAt(currentIndex);方法的ShowTab上,以及其他包含相同语句的地方。我只想在MainPage中的ObservableCollection中显示相应索引值的webbrowser。

1 个答案:

答案 0 :(得分:0)

您需要从某个地方以某种方式向集合中添加项目。应该有一些像

这样的代码
 Settings.Browsers.Value.Add(browserItemInstanceHere);

OR

 Settings.Browsers.Value = getSomeBrowserCollections();

您无法从空集合中获取项目,并且索引不得大于Count-1