2011-08-22 71 views
0

我有一个应该显示可观察集合内容的WPF应用程序的列表视图。我曾经在一个较旧的版本中显示过,但为了更频繁地更新列表视图,我更改了XAML并且在重新放回之后它现在不显示任何东西。WPF ListView不显示Observable Collection的内容

这里是XAML:

<TabItem GotFocus="TabSelect"> 
    <TabItem.Header> 
     <TextBlock FontSize="12pt">error log</TextBlock> 
    </TabItem.Header> 
    <Grid><ListView Name="JfifoList" ItemsSource="{Binding JFifoErrorCollection}" Background="Transparent"> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn DisplayMemberBinding="{Binding Time}" Header="time" Width="100" /> 
        <GridViewColumn DisplayMemberBinding="{Binding FEStatus}" Header="fe status" Width="100" /> 
        <GridViewColumn DisplayMemberBinding="{Binding BEStatus}" Header="be status" Width="100" /> 
        <GridViewColumn DisplayMemberBinding="{Binding Trigger}" Header="trigger" Width="100" /> 
       </GridView> 
      </ListView.View> 
     </ListView></Grid> 
</TabItem> 

我设置列表中的DataContext的“本”窗口:

JfifoList.DataContext = this; 

调试时,我可以看到的是,收集填充,所以要显示的数据...虽然也在调试时,我反复在调试输出中看到一个错误,指出“在PresentationFramework.dll中发生类型'System.NotSupportedException'的第一次机会异常”。

编辑:我查了一下,发现UI元素必须在UI线程中更新...由于某种原因(我没有在代码中创建任何代码)有很多线程在我的程序中运行,他们似乎都在更新我的ObservableCollection ...不知道这是否可能是问题...

+0

1.你看到任何绑定错误,在没有绑定为您'的ItemsSource =“{结合JFifoErrorCollection}”'? 2.用'ListBox'替换ListView,并通过设置其'DiaplayMemberPath'来显示'JFifoErrorCollection'的某个成员。如果列表框显示数据,那么ListView配置有一些问题。 3.即使你可观察的集合在另一个线程中填充,你是否在viewmodel模块的该线程中引发了'NotifyPropertyChanged(“JFifoErrorCollection”)? –

+0

Listbox也没有显示任何东西...... Observable Collection不会引发这个事件吗? – Luke

+0

实际上可观察的集合不是线程安全的。 :( –

回答

4

修改绑定到视图的列表内容必须在UI中完成线。 赶上你的应用程序UI线程,你可以使用这样的事情:

Application.Current.Dispatcher.Invoke(DispatcherPriority.Render, new Action(() => JfifoList = whateverData));