目錄
上一篇博客將源碼放出來了,但是並沒有做過多的介紹,所以如果自己硬看可能需要花費很長的時間,尤其這些代碼並不是自己寫的。項目不算復雜但是也不算簡單,這篇文章我盡我所能將整個項目結構、關鍵的代碼全部解釋一下,希望能給對本項目感興趣的童鞋、以及那些UWP初學者一些幫助。
背景了解
【完全開源】知乎日報UWP(上篇):界面設計、官方API分析。
【完全開源】知乎日報UWP(下篇):商店APP、github源碼。Windows APP良心出品。
項目截圖
類型說明
ZhiHuDaily.UWP.Core.Controls
里面只有一個SwipeableSplitView控件,該控件繼承自SplitView。該控件來自github:https://github.com/JustinXinLiu/SwipeableSplitView
ZhiHuDaily.UWP.Core.Data
支持自增式加載的集合,繼承自ObservableCollection,並且實現了ISupportIncrementalLoading接口。一共4個:
- CollectionsStoriesIncrementalLoadingCollection(對應收藏頁面文章列表)
- HomeStoriesIncrementalLoadingCollection(對應主頁文章列表)
- StoryCommentsIncrementalLoadingCollection(對應評論頁面評論(長/短)列表)
- ThemeStoriesIncrementalLoadingCollection(對應主題日報頁面列表)
ZhiHuDaily.UWP.Core.Https
對Web API接口的封裝,包含Web API URL、HTTP請求、JSON序列化。
ZhiHuDaily.UWP.Core.Models
用到的所有實體類。注意每個實體類並沒有對應到返回的Json數據體(因為返回的Json中很多字段都沒有使用到)。
ZhiHuDaily.UWP.Core.Share
微信分享相關的代碼。以后新增的其他分享(如QQ分享、微博分享)的代碼都可以放在這里。
ZhiHuDaily.UWP.Core.Tools
工具類。網絡類型管理類、文件管理類、Dispatcher管理類(解決非UI線程更新數據源引起的bug)。
ZhiHuDaily.UWP.Core.ViewModels
用到的所有ViewModel。基本每個頁面對應一個ViewModel。命名規則跟Xaml頁面一致(將Page改為ViewModel)。
ZhiHuDaily.UWP.Mobile
所有的Page頁面。
UI頁面
包含以下(按項目結構從上到下):
CollectionPage.Xaml | |
收藏頁面,使用到了ListView控件、自增式集合 |
EditorsPage.Xaml | |
主編列表頁面,使用到了ListView控件 |
HomePage.Xaml | |
主頁,使用到了ListView、FlipView控件,自增式集合 |
RecommendersPage.Xaml | |
推薦者列表頁面,使用到了ListView控件 |
|
|
|
SplashPage.Xaml | |
啟動頁面,使用到的都是普通控件 |
StoryCommentPage.Xaml | |
文章評論頁面,使用到了Pivot控件、ListView控件,自增式集合 |
StoryPage.Xaml | |
文章內容頁面,使用到了WebView控件,自己格式化HTML |
ThemePage.Xaml | |
主題日報頁面,使用到了ListView控件,自增式集合 |
粗略的總結一下,大概用到了以下技術:
- Data Binding。這個必須會,wpf、uwp開發都要用到;
- 頁面導航。Frame.Navigate()、Frame.GoBack()等等,導航時傳參;
- 頁面緩存。NavigationCacheMode枚舉值;
- HttpClient類型的使用。主要是get請求;
- Json格式化。在.NET中很方便,using Windows.Data.Json;
- 緩存處理。我做的很粗糙,大概就是將不變的內容下載下來后存成json格式文本,下載直接使用,包括圖片也是,並沒有將url直接賦值給Image.Source屬性;
- 自增式加載。這個也是重點,大概就是要實現ISupportIncrementalLoading這個接口,具體的做法參考源代碼;
- 依賴屬性注冊。有的控件並沒有某個屬性,導致我們不能使用Data Binding(數據綁定),這時候就需要給控件注冊一個屬性;
- MVVM模式。這個不用說,不過我項目中並沒有嚴格按照這個來;
- WebView控件的使用。WebView很強大,參照我之前的一篇博客:WebView做聊天框;
- 微信分享。參考微信官方文檔即可,怎樣喚醒APP,參考這篇博客:APP之間的數據交互。
其它沒什么。至於頁面Xaml的編寫,這個要熟,多寫寫,就能控制好格式,就像你寫html/css一樣。
上一篇博客中有一個視頻,但是不清楚,后來錄了一個稍微清楚的:
開源有益,多謝點贊!