前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用c# Prism WPF 创建一个Twitter阅读器

如何使用c# Prism WPF 创建一个Twitter阅读器

作者头像
程序你好
发布2018-07-20 11:04:35
1.6K0
发布2018-07-20 11:04:35
举报
文章被收录于专栏:程序你好程序你好

介绍

本文介绍了使用Microsoft Prism Library 6.3库为创建一个Twitter阅读器WPF程序。我的主要是想提供一个可以编译和运行实际例子。

如果您对Prism框架感兴趣可看看这篇文章。

背景

Prism是一个用于开发组合UI应用程序的框架。它是由微软 Patterns and Practice 团队创建的。Prism库运用了很多流行的技术,比如:设计模式(command),AOP/IOC、MVVM模式等。

关于Prism框架网络上有很多相关的信息。在本文中,我将简单地介绍一些Prism框架里概念,如Bootstrapper、Shell、Regions(区域)、Modules(模块)、Views视图和View-Based Navigation(基于视图的导航)。

通过本文我希望你可以大致了解Prism,我准备提供一个简单的工作实例,介绍如何使用Prism、WPF、MVVM等。因此,有必要的话你可以下载和研究源代码注意,我没有二进制下载,因为了解源代码更重要。

使用代码Using The Code:

应用程序界面如下图:

代码语言:javascript
复制
protected override void OnStartup(StartupEventArgs e)
{
    var bootstrapper = new Bootstrapper();                S
    bootstrapper.Run();
}

bootstrapper.run()程序启动执行,引导程序将LiveTweetsModule和SavedTweetsModule这两个模块添加到模块目录(ModuleCatalog),但是模块还没有加载。Prism使用Unity依赖注入容器创建主窗体的ViewModel(ShellWindowViewModel),创建了ShellWindow,并显示了窗口。如上图所示,Twitter帐号@TweetTesterNET已经登录。

解决方案包括4个项目和类库:

LiveTweetsModule 模块和SavedTweetsModule模块代码分为以下三个文件夹,NavigationRegion、TaskButtonRegion和WorkspaceRegion。每个文件夹由一个View和它对应的ViewModel组成。

如果你点击“Show Live Tweets Module”按钮并选择@dotnet,你会看到以下信息:

会执行以下代码:

代码语言:javascript
复制
private void ExecuteShowTweetListCommand() 
{         // Show Navigator     
    var usersNavigator = new Uri("LiveUsers", UriKind.Relative);     
    _regionManager.RequestNavigate("NavigatorRegion", usersNavigator, ShowLiveTweetsUserListNavigationCompleted);       // Show Workspace         var tweetsNavigator = new Uri("LiveTweets", UriKind.Relative);     
    _regionManager.RequestNavigate("WorkspaceRegion", tweetsNavigator);
}

区域管理器(The region manager)请求导航到“LiveUsers”区域,该区域就是左侧的用户列表。它还通过请求导航到“LiveTweets”区域来显示tweet列表。这就是基于视图的导航。

此时,LiveTweetsModule已经加载。导航区域由@TweetTesterNET的好友(用户)填充。工作区区域显示当前选定用户的实时tweet(即@dotnet)。

有时,你会看到一个有趣的tweet,其中有一些特定的信息(比如,链接到一个网站)。因为现有的推文可以很快被新的推文顶掉,你可能想在本地保存这条推文。每条推文都在推文的左边有一个图片。如果你点击图片,这条推文将被保存到一个名为SavedTweets.json的本地文件。

代码语言:javascript
复制
private void ExecuteSaveUserTweetCommand(TweetModel tweetModel)
{                      
    _dataService.SaveUserTweetToRepo(SelectedUserModel, tweetModel);
}

在上面的代码中, _dataService 就是ITweetDataService,它的实现代码是在ShellWindowViewModel 模块里实现的,入下:

代码语言:javascript
复制
public void SaveUserTweetToRepo(UserModel userModel, TweetModel tweetModel)
{          
    var user = _savedTweetsModel.UserModelList.FirstOrDefault(x => x.UserId == userModel.UserId);
    if (user == null)
    {
        user = new UserModel(userModel);
        _savedTweetsModel.UserModelList.Add(user);
    }
    if (!user.TweetModelList.Any(x => x.TweetId == tweetModel.TweetId))
    {
        user.TweetModelList.Add(tweetModel);
        JsonHelper.SaveAsJsonToFile(_savedTweetsModel, _savedTweetsFilePath);
        CurrentStatusMessage = $"The tweet (Id: {tweetModel.TweetId}) saved in {Path.GetFileName(_savedTweetsFilePath)}";
    }         
}

如果你点击按钮“Show Saved Tweets Module”你可以看保存在文件SavedTweets.json里的数据。

如您所见,您可以通过点击保存的tweet左侧的“X”图像来删除已保存的tweet。删除命令处理逻辑与save命令类似。

最后,您可以打开SavedTweets。从Windows资源管理器的工作文件夹中查看已保存的内容。

https://www.codeproject.com/Tips/1244972/Creating-a-Csharp-Prism-WPF-Twitter-Reader

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序你好 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档