日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ScrollViewer滚动究竟来触发载入数据的Behavior

發布時間:2025/5/22 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ScrollViewer滚动究竟来触发载入数据的Behavior 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
近期項目中遇到載入數據的性能問題, 原因是.net4.0的虛擬化支持不夠完畢,有好多bug在4.5才修復。 我們僅僅能利用大家通用的做法來延遲載入數據:每次載入固定少量的數據。當拖動究竟后。繼續載入興許同樣數量的數據。
思路:監聽ScrollViewer的VerticalOffsetProperty,假設值達到同意滾動的高度ScrollableHeight,則發出event通知外部處理載入邏輯。
用法:1.對于ItemsControl編輯控件模板,在當中的ScrollViewer中增加behavior。<ScrollViewer?x?:Name="DG_ScrollViewer"?Focusable="false">?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????<i:?Interaction.Behaviors>?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????<local:?ReachingBottomBehavior?ReachingBottomEvent="LazyLoadingBehavior_OnReachingBottomEvent" />?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????</i:?Interaction.Behaviors>
在blend中,比較簡單。直接對控件右鍵。編輯模板/副本。進入ScrollViewer后,把這個behavior拖到ScrollViewer的元素下就可以, 生成的代碼就是上面的內容。xmlns:i?="http://schemas.microsoft.com/expression/2010/interactivity"
2.實現上面ReachingBottomEvent的處理邏輯。比方:??private?void?LazyLoadingBehavior_OnReachingBottomEvent?()??????? {????????????var?vm?=?LayoutRoot.?DataContext?as?MainViewModel;????????????if?(vm?!=?null)??????????? {????????????????int?count?=?dtgRoot.?Items?.Count?;????????????????for?(int?i?=?count?;?i?<?count?+ 30;?i?++)??????????????? {????????????????????vm?.DataItems?.?Add(?????????????????????????????????????new?DataItem?()???????????????????????????????????? {?????????????????????????????????????????Item1?=?i?.?ToString(),?????????????????????????????????????????Item2?=?i?.?ToString() +?i?.ToString?()???????????????????????????????????? });??????????????? }??????????? }??????? }

代碼例如以下:
?public?class?ReachingBottomBehavior?:?Behavior<?ScrollViewer>??? {????????public?ReachingBottomBehavior?()??????? {????????????// Insert code required on object creation below this point.??????? }
????????protected?override?void?OnAttached()??????? {????????????base.OnAttached?();
????????????// Insert code that you would want run when the Behavior is attached to an object.????????????var?dpd?=?DependencyPropertyDescriptor.?FromProperty(ScrollViewer?.VerticalOffsetProperty,?AssociatedType);????????????dpd.AddValueChanged?(????????????????????????????????AssociatedObject,??????????????????????????????? (sender,???????????????????????????????? args) =>??????????????????????????????? {????????????????????????????????????RaiseReachingBottomEvent();??????????????????????????????? });??????? }
????????protected?override?void?OnDetaching()??????? {????????????base.OnDetaching?();
????????????// Insert code that you would want run when the Behavior is removed from an object.??????? }
????????private?void?RaiseReachingBottomEvent()??????? {????????????bool?isReachingBottom?=?AssociatedObject.?VerticalOffset?>=?AssociatedObject?.ScrollableHeight;????????????if?(isReachingBottom?)??????????? {????????????????if?(this?.ReachingBottomEvent?!=?null)??????????????? {????????????????????this.ReachingBottomEvent?();??????????????? }??????????? }??????? }
????????public?event?Action?ReachingBottomEvent;??? }




總結

以上是生活随笔為你收集整理的ScrollViewer滚动究竟来触发载入数据的Behavior的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。