填充DataGrid时,WPF UI会冻结

时间:2016-12-22 14:58:54

标签: c# wpf wpf-controls wpfdatagrid

我有一个绑定到Observable Collection的DataGrid的WPF项目。 使用异步方法填充此集合,当我调用此异步方法时,向用户显示带有进度环的动画。

当集合正在等待数据时,一切都可以正常工作,但当DataGrid填充项目时,进度环动画将停止工作1秒或2,直到DataGrid加载所有记录(此集合可能有50,000条记录或更多)。我只是想知道当DataGrid使用从集合返回的信息填充自己时是否有办法不锁定动画。

设置是: 我有一个带有隐藏用户控件的主窗口,它使用名为IsLoading的属性显示/隐藏动画。当此用户控件可见时,它会锁定其后面的所有用户对象。

守则

<Grid>
 <local:LoadingOverlayView 
        DataContext="{Binding Assets}"
        d:IsHidden ="True"
        Visibility="{Binding IsLoading, 
        Converter={StaticResource BoolToVisibilityConverter},
                UpdateSourceTrigger=PropertyChanged}"/>
</Grid>

2 个答案:

答案 0 :(得分:0)

实现动画进度环,条等的最佳方法是使用辅助线程。稍后使用ui线程同步其他线程使用Dispatcher.Invoke()方法。

答案 1 :(得分:0)

这意味着关闭数据网格的虚拟化。它为所有行创建了所有UI元素。这可能有不同的原因。很可能是因为您将数据网格放在滚动面板中。通过这样做,它不知道它的高度,并且无法确定它为创建UI元素所需的最小行集。

这是好读:https://msdn.microsoft.com/en-us/library/cc716879(v=vs.110).aspx但它可能变得相当复杂