【发布时间】:2012-10-29 12:38:25
【问题描述】:
我的数据源很慢,所以我异步创建它。此外,我的视图模型的许多属性本身都很慢。因此,我也让它们异步(绑定到 Telerik 属性网格):
<Grid>
<Grid.DataContext>
<ObjectDataProvider ObjectType="{x:Type viewModels:MyViewModel}"
IsAsynchronous="True" x:Name="myViewModel" />
</Grid.DataContext>
<telerik:RadPropertyGrid x:Name="settings" Item="{Binding IsAsync=True}">
<telerik:RadPropertyGrid.PropertyDefinitions>
<telerik:PropertyDefinition
Binding="{Binding Path=SlowProperty,IsAsync=True,Mode=TwoWay}" />
</telerik:RadPropertyGrid.PropertyDefinitions>
</telerik:RadPropertyGrid>
</Grid>
调试时,我可以看到数据源确实是在另一个线程中创建的,因此不会阻塞 UI。然而,当我进入SlowProperty 时,调试器显示我仍在主线程中——这可以通过 UI 挂起直到属性返回的事实来证明。
问:我在这里缺少什么? IsAsync 对于异步属性还不够吗?
编辑:这似乎适用于普通的TextBlock。 IsAsync 行为是否依赖于控件的实现? (在这种情况下,我怀疑属性网格中存在错误。)
【问题讨论】:
标签: wpf mvvm asynchronous viewmodel