【发布时间】:2025-12-19 02:50:11
【问题描述】:
我有一个奇怪的问题,我不明白。这是在 Silverlight/WP7 中。
我正在用项目填充 ObservableCollection,稍后我想更新每个项目。
我已设法精简代码以重现错误。我的 XAML 只是一个 ListBox 和一个 Button。
private ObservableCollection<int> Words = new ObservableCollection<int>();
public MainPage()
{
InitializeComponent();
listBox1.ItemsSource = Words;
}
private void button1_Click(object sender, RoutedEventArgs e)
{
List<int> numbers = new List<int>()
{
1,2,3
};
foreach (var number in numbers)
{
var index = Words.IndexOf(number);
if (index > -1)
Words[index] = number;
else
Words.Add(number);
}
}
我第一次运行代码时,它会用数字 1、2 和 3 填充 ObservableCollection,它们会显示在 ListBox 中。
第二次运行时,所有代码都被执行,但随后抛出了一个未处理的异常,并显示“参数不正确”的消息。
奇怪的是,如果我在构造函数中删除我的行,即我设置 ItemsSource 的行,则不会引发错误。可观察的集合已按应有的方式更新。
另外,如果我注释掉“Words[index] = number”行,它也可以工作。因此,由于某种原因,当我的 ObservableCollection 被设置为 ListBox 的数据源时,我无法替换该项目。
有人能解释为什么吗? (或提出解决方法?)
我的解决方案; 我从
更改了我的代码隐藏if (index > -1)
Words[index] = number;
到
if (index > -1)
{
Words.RemoveAt(index);
Words.Add(number);
}
这让问题消失了。
【问题讨论】:
标签: silverlight exception xaml windows-phone-7 observablecollection