介绍
本文介绍了使用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:
应用程序界面如下图:
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,你会看到以下信息:
会执行以下代码:
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的本地文件。
private void ExecuteSaveUserTweetCommand(TweetModel tweetModel)
{
_dataService.SaveUserTweetToRepo(SelectedUserModel, tweetModel);
}
在上面的代码中, _dataService 就是ITweetDataService,它的实现代码是在ShellWindowViewModel 模块里实现的,入下:
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