【发布时间】:2012-09-23 03:22:56
【问题描述】:
我正在尝试制作一个选项卡式浏览器代码示例,但我无法正确实现解决方案。我创建了一个自定义类BrowserItem,它有两个值,我的自定义 Web 浏览器和一个 url 字符串。然后,我创建了一个 BrowserItem 类型的 ObservableCollection,在其中我在单击事件时将新项目添加到 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 中显示相应索引值的浏览器。
【问题讨论】:
-
您必须接受以前回答的问题,这可以帮助正在搜索类似问题的其他受众。
-
你检查过传递的索引的值和集合的大小吗?
-
是的,我只是注意到初始化时没有填充集合,所以我调整了上面的解决方案。但是,当检查
if (Settings.Browsers.Value.ElementAt(currentIndex) == null)行的 ShowTab 中的某个索引是否为空时,我仍然收到 ArguementOutOfRange 异常。允许用户在另一个页面的点击事件上添加一个项目,我将新创建的集合索引值传递给我的 MainPage,从那里我必须检查该索引值是否包含 BrowserItem,如果不加一个。
标签: c# windows-phone-7 observablecollection