我试图在用户到达列表框底部时实现一个懒惰的“加载更多”项目,但每当我尝试将新项目添加到列表框时,我得到的结果如下:
“只读集合不支持该操作。”
我已经尝试过几种从论坛到博客的解决方案似乎都没有用。我甚至无法理解这个对我来说有点奇怪的问题背后的逻辑。
我正在做的是基本上加载一个项目列表并指定为我的列表框的项目源。
wineFilterListBox.ItemsSource = wines;
当用户到达列表底部时,我会添加更多项目(就像wp7的推特应用程序一样)
public ObservableCollection<Wine> wines;
...
if (atBottom)
{
int Count = page.wineFilterListBox.Items.Count;
int end = Count + 10;
for (int i = Count; i < end; i++)
{
page.LoadWineList(Count);
}
}
...
private void LoadWineList(int Count = 1)
{
...
wineFilterListBox.Items.Add(wines);
}
答案 0 :(得分:9)
当您使用ItemSource
时,Items
集合变为只读。听起来您必须将数据添加到集合中,而不是添加到ListBox
Items
属性。
请参阅MSDN:ItemsControl.ItemSource Property
特别是本节:
设置ItemsSource属性后,Items集合将变为只读且固定大小。
尝试直接将该项添加到wines
集合,因为您的集合是“ObservableCollection”:
您应该将ItemsSource设置为实现该对象的对象 INotifyCollectionChanged接口使集合中的更改 将反映在ItemsControl中。 ObservableCollection(Of T) class定义了这样一个对象。
答案 1 :(得分:0)
仅供参考,如果您故意不想使用ObservableCollection
来设置ItemsSource
您可以手动将Wine
添加到wineFilterListBox.Items
for (int i = Count; i < 10; i++)
{
wineFilterListBox.Items.Add(new Wine());
}
这会导致wineFilterListBox.Items
不能变为只读