天天看點

UWP VirtualizedVariableSizedGridView 支援可虛拟化可變大小Item的View(二)

這篇講講開發過程中一些重要問題解決。

1.支援ISupportIncrementalLoading,實作HasMoreItems屬性和LoadMoreItemsAsync方法

因為我們上篇裡面講過,需要把源資料分成一個一個的Group作為GirdView的源,

是以LoadMoreItemsAsync方法裡面我做了以下的實作:

應該還是比較清楚的,當源資料裡面的個數超過了RowItemsCount的時候,我們才插入Item。

也就是說。當滿15個Item的時候我們才插入第1個Row Item,當滿30個Item的時候我們插入第2個Row Item......

可能有人會說,如果源資料不是15個整數,那怎麼辦呢??嗯,我也遇到了這個問題,當然,HasMoreItems屬性也需要作相應的實作

當HasMoreItems為false的時候,就是說這個源不會有更多的資料了,是以這時候我們應該把剩餘的Item都加入到下一個Row Item裡面去。

2.當Window size 改變的時候,實作不同的可變大小結構。

public class ResizeableItems : List<ResizeableItem>

每一種結構,我用一個ResizeableItem來表示。

比如window 最小的時候這種結構。

設定GirdView裡面的每個Item的寬高比2:1,設定ResizeableItem的最小和最大值,這個意思就是當window 到達MIn和Max的這個區間的時候就使用這個結構。

然後也設定出其它的結構樣式。(PS:我這裡還沒找到Get 最小window 寬度的辦法,好像隻能設定,如果有辦法的朋友請留言一下)

UWP VirtualizedVariableSizedGridView 支援可虛拟化可變大小Item的View(二)
UWP VirtualizedVariableSizedGridView 支援可虛拟化可變大小Item的View(二)

View Code

這樣我們就設定好了,到達多少size的時候使用什麼結構模闆了。。

最後我們隻需要在控件的MeasureOverrid中去設定,GridView的Item的樣式就好了.

3.ListViewItem預設模闆的修改

在使用這個的時候因為其實是個ListView,是以當你點選到GridView外面的時候就點選到了ListLViewItem上面,會有些你不想要的效果,比如PointerDown。

第一次用VS拿到ListViewItem的模闆的時候發現沒地方可能修改這個動畫呢???

再查了下MSDN,發現原來,ListViewItem是有2套模闆的,

這個模闆跟我從VS裡面拿到的是一樣的。

總結:

雖然說這個控件已經滿足了Boss的需求,但是我還是覺得有一些需要改進的。

1.UI Virtualized

如果說GridView裡面的Item個數被使用者設定的很多,這個必定是很占用記憶體的。

實際Debug,也發現,Live Visual Tree裡面有3個ListViewItem.

感覺記憶體中不需要這麼多個ListViewItem 來循環回收利用,我的猜想是微軟做了上下各一個Item的緩存來提高Scrolling的流暢。

但對于這個控件來說,記憶體裡面的UI Item 會有3*15個,因為我們知道VariableSizedWrapGrid是不支援UI虛拟化的。

2.沒有對Insert,Delete進行處理。

這個控件還有一個限制,就是源是一個固定個數或者是ISupportIncrementalLoading,如果在過程中add,insert,delete的話,暫時沒有進行處理。

隻對Reset這種情況進行了處理。

希望有好想法的童鞋能留言,大家讨論共同進步。。

為了部落!

繼續閱讀