У меня странная проблема, которую я не понимаю. Это в 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);
}
}
При первом запуске кода он заполняет ObservableCollection числами 1, 2 и 3, и они отображаются в ListBox.
При втором запуске выполняется весь код, но затем выдается необработанное исключение с сообщением «Неверный параметр».
Странная вещь в том, что если я удалю свою строку в конструкторе, ту, где я установил ItemsSource, ошибка не будет выдана. Наблюдаемая коллекция обновляется, как и должно быть.
Кроме того, если я закомментирую строку «Words [index] = number», это тоже сработает. Поэтому по какой-то причине, когда моя коллекция ObservableCollection установлена как источник данных для ListBox, я не могу заменить элемент.
Может кто-нибудь объяснить, почему? (Или предложить обходной путь?)
Мое решение;
Я изменил свой код от
if (index > -1)
Words[index] = number;
до
if (index > -1)
{
Words.RemoveAt(index);
Words.Add(number);
}
Это заставило проблему уйти.