【完全開源】知乎日報UWP版:項目結構說明、關鍵源代碼解釋


目錄

 

說明

上一篇博客將源碼放出來了,但是並沒有做過多的介紹,所以如果自己硬看可能需要花費很長的時間,尤其這些代碼並不是自己寫的。項目不算復雜但是也不算簡單,這篇文章我盡我所能將整個項目結構、關鍵的代碼全部解釋一下,希望能給對本項目感興趣的童鞋、以及那些UWP初學者一些幫助。

背景了解

【完全開源】知乎日報UWP(上篇):界面設計、官方API分析。

【完全開源】知乎日報UWP(下篇):商店APP、github源碼。Windows APP良心出品。

github源碼

商店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控件
    SettingPage.Xaml

    設置頁面,使用到的都是普通控件
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一樣。

 

演示視頻

上一篇博客中有一個視頻,但是不清楚,后來錄了一個稍微清楚的:

 

開源有益,多謝點贊!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM