WPF ListView不显示Observable Collection的内容

时间:2011-08-22 09:48:18

标签: c# wpf xaml data-binding listview

我在WPF应用程序中有一个listview,它应该显示一个可观察集合的内容。我把它显示在较旧的版本中,但是为了更频繁地更新listview,我更改了XAML并且在放回之后它现在不会显示任何内容。

这是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设置为“this”窗口:

JfifoList.DataContext = this;

调试时我可以看到集合已填充,因此有数据显示...虽然在调试时也是如此,但我反复看到一条错误,上面写着“在PresentationFramework中发生了'System.NotSupportedException'类型的第一次机会异常” .dll“在调试输出中。

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

1 个答案:

答案 0 :(得分:4)

绑定到视图的列表内容的修改必须在UI线程中完成。 要捕获App UI线程,您可以使用以下内容:

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