原創|其它|編輯:郝浩|2012-08-22 22:04:27.000|閱讀 1688 次
概述:如果你讀了新的 WPF 4.5 功能上的 MSDN 頁面,你會發現它的標簽下"自動更新的數據綁定源"。但是對我來說它更加精確的理解是“延遲”屬性被添加到了綁定的添加擴展里面。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
如果你讀了新的 WPF 4.5 功能上的 MSDN 頁面,你會發現它的標簽下"自動更新的數據綁定源"。但是對我來說它更加精確的理解是“延遲”屬性被添加到了綁定的添加擴展里面。更多WPF4.5探秘系列文章
這篇文章是介紹WPF 4.5新功能系列的一部分,通過閱讀這篇文章,你會發現這個屬性的目的,如何使用它,以及在某些條件下還是相當的有用的。
這個屬性是什么?
綁定需要在兩個對象間完成:源(數據來自哪里)和目標(數據要到哪里)。比如,如果你綁定了一個TextBlock的Text屬性到你的ViewModel屬性“name” , TextBlock的目標和源就是你的ViewModel 。
綁定將在兩個屬性之間同步執行,當且僅當在TwoWay模式下的綁定完成之后,目標可以更新數據源值(TextBlock能夠更新ViewModel)。
如何使用這個屬性?
由于這是一個額外的綁定的屬性,所以你必須在你創建的每個綁定上進行定義它。
延遲是被以毫秒為單位定義,默認值0是一個經典的綁定約束。
下面就是一個綁定示例,設置一個500毫秒的延遲:
<TextBlock Text="{Binding Name,
Delay=500}"/>
延遲是只應用在只有一個方向:從目標到源。
什么時候使用這個屬性?
最初有人可能會認為這不是個有用的功能,但是在一段時間之后,會發現在某些場景中還是非常有用的。
1、 MSDN 指出,有一些組件比如說是滑塊,就沒有必要去對滑塊移動的每個像素更新源值。
2、 同樣參照MSDN,你可以在文本框中使用這種屬性來輸入文本塊,而不用一個字母一個字母的輸入。
3、 可以用于master/details scenarii,當改變選擇觸發一些耗時的處理在UI線程上時。
4、 在相同的情況下,如果您在啟動每個更改的異步工程,它可以STRT很多的線程池的飽和(或引起過多的網絡使用等)。
5、 有時在master/details scenarii里,詳細的視圖是相當復雜的,也需要時間來呈現它,這時延遲可以觸發渲染,但是只有在它是有用的時候。
舉個例子:
master/detail scenarii是非常有用的,以一個例子來說明它,比方說,我們又一列“person”,然后從里面選擇一個詳細的顯示出來,接下來我們會看見如下的界面:
每次變更所選的人,在UI線程上就會觸發一個費時的過程在setter里,通過 Thread.Sleep 的調用來進行模擬:
public Person SelectedPerson
{
get { return _selectedPerson; }
set
{
_selectedPerson = value;
//Simulate time consuming operation
Thread.Sleep(500);
RaisePropertyChanged("SelectedPerson");
}
}
當未設置延遲,則在列表中的導航只是緩慢和凍結上每個更改的用戶界面。只是讓“下箭頭”鍵讓UI凍結有點太大了。設置延遲屬性值為500毫秒,就可以輕松地用鍵盤導航列表。
<ListBox ItemsSource="{Binding Persons}" SelectedItem="{Binding SelectedPerson,Delay=500}" />
最后,添加一個按鈕,用于觸發一種源對象就是,證明延遲工程只向一個方向的改變。
注冊后,演示的完整代碼源可以發在件夾上找到。
它是對 WPF 框架的補充,同時它也非常有用 !如果您希望更多的信息,您可以閱讀此新屬性的 MSDN 頁面。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:外文翻譯