WPF绑定是Async Get State

时间:2010-10-25 15:53:51

标签: asynchronous binding

我正在使用Binding IsAsync属性来保持UI响应并从属性的get访问器加载数据,并且在使用MVVM时被证明是一个不错的选择。这种方法很棒,不需要任何手动代码来进行异步操作。我的dataload花费几秒钟的时间很少,在这段时间内很难区分“无数据”和“数据加载”。是否有一个属性可以检测绑定“IsBusy”或“正在加载”的状态,以便我可以显示加载操作未完成的消息?

感谢任何帮助。

2 个答案:

答案 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)

According to the docs

  

在等待值到达时,绑定会报告FallbackValue(如果有)或绑定目标属性的默认值。

您可以使用此值在加载绑定时向用户显示消息。