我正在使用Binding IsAsync属性来保持UI响应并从属性的get访问器加载数据,并且在使用MVVM时被证明是一个不错的选择。这种方法很棒,不需要任何手动代码来进行异步操作。我的dataload花费几秒钟的时间很少,在这段时间内很难区分“无数据”和“数据加载”。是否有一个属性可以检测绑定“IsBusy”或“正在加载”的状态,以便我可以显示加载操作未完成的消息?
感谢任何帮助。
答案 0 :(得分:17)
我知道,这是一个旧线程。但是,如果有人仍然感兴趣......
您可以使用PriorityBinding,本文中有一个极好的解释示例: http://www.switchonthecode.com/tutorials/wpf-tutorial-priority-bindings
这个想法是规定一个PriorityBinding,它依次定义了几个常规绑定:
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock.Text>
<PriorityBinding>
<Binding ElementName="MainWindow" Path="Slow" IsAsync="True" />
<Binding ElementName="MainWindow" Path="Fast" />
</PriorityBinding>
</TextBlock.Text>
</TextBlock>
绑定的顺序决定优先级,优先级最高。在这种情况下,快速绑定(最低优先级)将立即填充文本块,因为您可能已将其绑定到字符串属性“正在加载...”或“排序...”,具体取决于当时发生的情况,并且没有延迟。
但是后来当慢速异步绑定的属性返回一个值时,它的优先级越高意味着它将接管,因为它在列表的前面,并且其结果将被绑定,显示实际结果。
如果你需要填充进度弹出窗口,你可以在ViewModel中绑定属性的getter中实现它,虽然我没有尝试过这样的事情。
答案 1 :(得分:6)