WPF 中的实时绑定

Jor*_*dan 3 wpf binding real-time

很简单,我怎样才能使绑定更具响应性。也就是说,更接近于在后台更改视图模型时更改界面。

我有一个基于计时器的进度条,它非常跳跃。而且我有一个触摸屏键盘,可以在按下键后更新字段,例如数小时(夸张)。

Pav*_*kov 5

好的,您可以使用三个选项来使 UI 具有响应性:

(1). 使用异步绑定:

<TextBlock Text="{Binding ViewModelTextProperty, IsAsync=True}"/>
Run Code Online (Sandbox Code Playgroud)

这样, 的值ViewModelTextProperty将被异步检索。

(2). 使用PriorityBinding- 它类似于上一个选项,但另外它允许您在主绑定异步执行时显示一些内容:

<TextBlock>
   <TextBlock.Text>
      <PriorityBinding>
          <Binding Path="ViewModelTextProperty" IsAsync="True"/>
          <Binding Path="FastViewModelTextProperty" IsAsync="True"/>
      </PriorityBinding>
   </TextBlock.Text>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

在顶部指定慢速绑定,在底部指定快速绑定。也就是说,在这个例子中,FastViewModelTextProperty将首先显示值的值,当值的值ViewModelTextProperty准备好时,它将被显示。

(3). 最后,您可以在视图模型中使用通常的异步编程(异步调用方法、使用计时器等)。每当您准备好显示一些数据时,请使用 Dispatcher 更新 UI(设置绑定属性的值):

private void OnAsyncOperationCompleted()
{
   Application.Current.Dispatcher.BeginInvoke(new Action(() => {
      // Update the UI
   }));
}
Run Code Online (Sandbox Code Playgroud)