很簡單,我如何使綁定更具響應性。也就是說,將界面更改爲更接近於在後臺更改視圖模型的時間。WPF中的實時綁定
我有一個令人難以置信的跳動的基於計時器的進度條。而且我有一個觸摸屏鍵盤,可以在按鍵後更新字段,比如數小時(誇張)。
很簡單,我如何使綁定更具響應性。也就是說,將界面更改爲更接近於在後臺更改視圖模型的時間。WPF中的實時綁定
我有一個令人難以置信的跳動的基於計時器的進度條。而且我有一個觸摸屏鍵盤,可以在按鍵後更新字段,比如數小時(誇張)。
問題是分派器的隊列優先級(請參見this)。即使您對ViewModel的更改做出了更快的響應(例如,通過手動更新控件),渲染本身也會以較低的優先級完成。因此,我想它不會對你做出任何明顯的區別,因爲用戶在下一次渲染後不會看到它。
編輯: 一般來說,即使在進行數據綁定時,WPF中的UI也非常靈敏。不過,也有一些原因,它可能會很慢(使用WPF performance toolkit看看應用程序):
OK,有三個選擇,當談到使UI響應,你可以使用:
(1)。使用異步綁定:
<TextBlock Text="{Binding ViewModelTextProperty, IsAsync=True}"/>
這樣,ViewModelTextProperty
的值將被異步檢索。
(2)。使用PriorityBinding
- 它類似於前面的選項,但另外它可以讓你同時主綁定是異步執行顯示的東西:
<TextBlock>
<TextBlock.Text>
<PriorityBinding>
<Binding Path="ViewModelTextProperty" IsAsync="True"/>
<Binding Path="FastViewModelTextProperty" IsAsync="True"/>
</PriorityBinding>
</TextBlock.Text>
</TextBlock>
慢綁定在頂部和快速的人在BUTTOM規定。也就是說,在本例中,首先顯示的值爲FastViewModelTextProperty
,當ViewModelTextProperty
的值準備就緒時,將顯示該值。
(3)。最後,您可以在視圖模型中使用通常的異步編程(異步調用方法,使用定時器等)。每當你準備顯示一些數據,更新UI(綁定屬性的設定值)使用Dispatcher:
private void OnAsyncOperationCompleted()
{
Application.Current.Dispatcher.BeginInvoke(new Action(() => {
// Update the UI
}));
}
這不正是你所要求的,但WPF具有類似PriorityBinding這樣就可以顯示不同的值時,緩慢的綁定在後臺加載。還有DispatchPriority,因此您可以決定UI如何從調度程序接收項目。 – baalazamon 2011-02-03 16:01:27