【完全开源】知乎日报UWP版:项目结构说明、关键源代码解释
目录
说明
上一篇博客将源码放出来了,但是并没有做过多的介绍,所以如果自己硬看可能需要花费很长的时间,尤其这些代码并不是自己写的。项目不算复杂但是也不算简单,这篇文章我尽我所能将整个项目结构、关键的代码全部解释一下,希望能给对本项目感兴趣的童鞋、以及那些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一样。
演示视频
上一篇博客中有一个视频,但是不清楚,后来录了一个稍微清楚的:
开源有益,多谢点赞!
【完全开源】知乎日报UWP版:项目结构说明、关键源代码解释的更多相关文章
- 【完全开源】知乎日报UWP版(下篇):商店APP、github源码、功能说明。Windows APP 良心出品。
目录 说明 功能 截图+视频 关于源码和声明 说明 陆陆续续大概花了一个月的时间,APP算是基本完成了.12月份一直在外出差,在出差期间进行了两次功能完善,然后断断续续修补了一些bug,到目前为止,我 ...
- 【完全开源】知乎日报UWP版:增加Live磁贴、Badge、以及Toast通知
目录 说明 实现方法 APP生命期 后台任务 说明 之前网上有人建议增加磁贴(tile).徽章(badge)功能.利用周末的时间,将这两个功能添加上去了.如果将磁贴固定到开始屏幕,磁贴就会循环播放首页 ...
- 【完全开源】知乎日报UWP版(上篇):界面设计、官方API分析
目录 说明 使用Fiddler分析android版API 部分效果图 关于源码 说明 在做博客园UWP版的时候其实就有做知乎日报的打算了,前段时间一直出差,在酒店里用Fiddler简单的分析了一下An ...
- 【开源】知乎日报UWP 更新
说明 大概十天之前我更新了一次APP,后来又仔细看了一下Store里的评论,发现还有几个地方没有改过来.于是前天晚上抽时间改了一下,顺便完善了一下UI体验. 没有看前面文章的童鞋可以看一下下面的链接: ...
- 知乎日报win10版 - 天天读报【开源】
业余时间写的一个知乎日报win10版客户端,支持收藏,评论,点赞等. 商店地址:https://www.microsoft.com/zh-cn/store/apps/%E5%A4%A9%E5%A4%A ...
- Win10通用程序 UWP版HtmlAgilityPack UWP应用使用示例
Win10 UWP版HtmlAgilityPack,UWP应用使用示例下载. Win10 发布了一个多星期,sdk是随着一起发布的,我安装好vs2015和sdk 开发UWP 通用程序. 在做网络解析的 ...
- 一个知乎日报pwa
前几天写了一篇文章关于如何实现一个简单版的pwa应用,端午撸了一个简易版知乎日报pwa. 关于如何写一个pwa,这里就不多介绍了,请移步这里.应用使用vue+vuex+axios,API这里,这里做了 ...
- 新浪微博UWP版-实现‘分享功能’的艰难路
索引 介绍 遇到的问题 寻求帮助 最终的解决方案 最终效果 介绍 在整个Team的共同努力下,在众多WPer的期待下,Weibo UWP版终于正式发布了.有关Weibo UWP版更多的信息请大家参考这 ...
- React-Native运行知乎日报遇到的问题
研究几天RN(React-Native)后,跟着官方的demo做了一下电影图片显示的那个,但是总感觉官方的demo欠缺点什么,所以找来找去找到了RN版的知乎日报,话说知乎日报什么版的都有,不信你们上网 ...
随机推荐
- Solr_全文检索引擎系统
Solr介绍: Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务.Solr可以独立运行在Jetty.Tomcat等这些Servlet容器中. Solr ...
- Modify Branding of FreeCAD
Modify Branding of FreeCAD eryar@163.com This article describes the Branding of FreeCAD. Branding me ...
- iOS系列文章
本博客全为原创,如果借鉴了其他文章会在博文的下面进行说明.欢迎转载,但要在文章中给出原文链接,谢谢. 有链接的说明已经发布,没有链接的说明还没有发布. 并不是所有的博文都在这里罗列,有兴趣的可以看博客 ...
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
- 马里奥AI实现方式探索 ——神经网络+增强学习
[TOC] 马里奥AI实现方式探索 --神经网络+增强学习 儿时我们都曾有过一个经典游戏的体验,就是马里奥(顶蘑菇^v^),这次里约奥运会闭幕式,日本作为2020年东京奥运会的东道主,安倍最后也已经典 ...
- jQuery可拖拽3D万花筒旋转特效
这是一个使用了CSS3立体效果的强大特效,本特效使用jQuery跟CSS3 transform来实现在用户鼠标按下拖动时,环形图片墙可以跟随鼠标进行3D旋转动画. 效果体验:http://hovert ...
- Android中的多线程断点下载
首先来看一下多线程下载的原理.多线程下载就是将同一个网络上的原始文件根据线程个数分成均等份,然后每个单独的线程下载对应的一部分,然后再将下载好的文件按照原始文件的顺序"拼接"起来就 ...
- AutoMapper(五)
返回总目录 Dynamic和ExpandoObject映射 AutoMapper不用任何配置就可以从dynamic(动态)对象映射或映射到dynamic对象. namespace FifthAutoM ...
- Spring7:基于注解的Spring MVC(下篇)
Model 上一篇文章<Spring6:基于注解的Spring MVC(上篇)>,讲了Spring MVC环境搭建.@RequestMapping以及参数绑定,这是Spring MVC中最 ...
- Goodbye2014,Hello2015
正如我在研发会议上说的,总结是为了更好的计划:而计划,则是让你做事有目标,有方向:有了目标和方向,你才能真正把事情做成! 总的来说2014年可以归纳为下图: 2014年总结 一年的活动,基本可以归纳为 ...