我正在尝试制作标签式浏览器代码示例,但我无法正确地解决该问题。我创建了一个自定义类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。
答案 0 :(得分:0)
您需要从某个地方以某种方式向集合中添加项目。应该有一些像
这样的代码 Settings.Browsers.Value.Add(browserItemInstanceHere);
OR
Settings.Browsers.Value = getSomeBrowserCollections();
您无法从空集合中获取项目,并且索引不得大于Count-1