C# 无法选择项目列表框:InvalidOperationException

C# 无法选择项目列表框:InvalidOperationException,c#,xaml,listbox,windows-phone,C#,Xaml,Listbox,Windows Phone,我用一个到ObservableCollection的绑定填充我的列表框。这些项被添加到列表框中很好,但是当我想要选择列表框的第一项时,我得到一个InvalidOperationException 代码: 两者都不起作用,我不知道为什么?与使用dispatcher添加新项目的方式相同,使用它更改所选项目: Dispatcher.BeginInvoke(() => datelistbox.SelectedIndex = 0); Dispatcher调用是异步的,无法保证它们何时运行,因此当您

我用一个到ObservableCollection的绑定填充我的列表框。这些项被添加到列表框中很好,但是当我想要选择列表框的第一项时,我得到一个InvalidOperationException

代码:


两者都不起作用,我不知道为什么?

与使用dispatcher添加新项目的方式相同,使用它更改所选项目:

Dispatcher.BeginInvoke(() => datelistbox.SelectedIndex = 0);

Dispatcher调用是异步的,无法保证它们何时运行,因此当您设置所选索引时,该项还不存在。将所有基于UI的工作整合到单个调用中-

List<DateItem> items = new List<DateItem>();
for (int i = 0; i < (days-currentday+1); i++)
   // Create your items and add them to the list
Dispatcher.BeginInvoke(() =>
{
   DateList.ItemsSource = items;
   DateList.SelectedIndex = 0;
});

是否在工作线程(而非UI线程)中调用PopulateDateListbox?在页面=loaded eventhandler中调用PopulateDateListbox。发布您收到的错误消息我看到了。。我通常会对这样的事情有未经授权的感觉!谢谢。@PhilippeMaes这是因为它不是跨线程访问。由于您正在使用dispatcher将元素添加到列表中,并且由于PopulatedTelestBox正在UI线程上执行,您说您是从page_load事件处理程序调用它,因此在方法完成执行之前不会添加项。因此,您正在尝试选择尚未添加的项目。最好的解决方案是完全删除对dispatcher的所有调用。我明白了。有时很难知道何时需要使用调度器。但我还在学习!
Dispatcher.BeginInvoke(() => datelistbox.SelectedIndex = 0);
List<DateItem> items = new List<DateItem>();
for (int i = 0; i < (days-currentday+1); i++)
   // Create your items and add them to the list
Dispatcher.BeginInvoke(() =>
{
   DateList.ItemsSource = items;
   DateList.SelectedIndex = 0;
});