2024年5月5日发(作者:)
Prism 一 介绍
Prism是一个在WPF、UWP、Xamarin Forms中构建松散耦合,可维护和可测试的XAML应用程序的框架。
每个平台都有单独版本,这些版本在独立的时间表上开发。
Prism提供一组设计模式的实现,这些设计模式有助于编写结构良好且可维护的XAML应用程序,包括
MVVM,依赖注入,命令,EventAggregator等。
Prism的核心功能是针对这些平台的共享代码库。
那些需要特定于平台的东西在目标平台相应库中实现。
Prism还提供了这些模式与目标平台的完美集成。
例如,Prism for UWP和Xamarin Forms允许使用抽象来进行可单元测试的导航,和在平台概念和API之上进行
导航,以便可以充分利用平台本身提供的功能。
Prism 6是完全开源版本。核心团队成员都是开发Prism 1到5的团队的一部分,现在已经将转交给开源社区,
保持它活跃和发展,以支持.NET社区。
有成千上万的公司为WPF,Silverlight和Windows Runtime采用了之前版本的Prism,我们希望他们将继续与
我们一起继续发展和改进框架,以跟上当前平台功能和要求。
目前,还没有计划为Silverlight或Windows 8 / 8.1 / WP8.1创建新版本的库。对于那些你仍然可以使用早期版
本。如果有足够兴趣和贡献者来完成这项工作,可以考虑一下,但目前不在开发的路线图上。
Prism 二 命令
除了在视图中对数据进行显示或编辑外,ViewModel还可能定义由用户执行的一个或多个动作。
用户可以通过UI执行的动作通常被定义为命令。命令提供一种方便的方法绑定到UI中的控件的动作。它封装了
实现动作的实际代码,并使其与视图中的实际可视化表示分离。
当用户与视图交互时,用户可以以多种不同的方式直观地表示和调用命令。在大多数情况下,它们是通过鼠标
单击调用的,但也可以通过快捷键按下,触摸手势或任何其他输入事件来调用。视图中的控件绑定到
ViewModel命令,以便用户可以使用控件定义的任何输入事件或手势来调用。视图中的UI控件与命令之间的交
互可以是双向的。所以,可以在用户与UI交互时调用该命令,并且可以在启用或禁用命令时自动启用或禁用
UI。
ViewModel可以将命令实现为命令对象(实现ICommand接口的对象)。可以以声明方式定义视图与命令的交
互,无需在视图的代码隐藏文件中使用复杂的事件处理代码。例如,某些控件本身支持命令并提供Command
属性,该属性可以是绑定到ViewModel提供的ICommand对象的数据。在其他情况下,命令行为可用于将控件
与ViewModel提供的命令方法或命令对象相关联。
实现ICommand接口非常简单。Prism提供了此接口的DelegateCommand实现,您可以在应用程序中使用它。
注意
DelegateCommand在ds命名空间中,该命名空间位于 NuGet包中。
创建 DelegateCommand
Prism DelegateCommand类封装了两个委托,每个委托引用ViewModel类中实现的方法。它通过调用这些委
托来实现ICommand接口的Execute和CanExecute方法。在DelegateCommand类构造函数中指定ViewModel
方法的委托。例如,以下代码示例显示如何通过指定OnSubmit和CanSubmit ViewModel方法的委托来构造表
示Submit命令的DelegateCommand实例。然后,该命令通过只读属性公开给视图,该属性返回对
DelegateCommand的引用。
public class ArticleViewModel
{
public DelegateCommand SubmitCommand { get; private set; }
public ArticleViewModel()
{
SubmitCommand = new DelegateCommand
}
void Submit(object parameter)
{
//implement logic
}
bool CanSubmit(object parameter)
{
return true;
}
}
当在DelegateCommand对象上调用Execute方法时,它只是通过您在构造函数中指定的委托将调用转发到
ViewModel类中的方法。类似地,当调用CanExecute方法时,将调用ViewModel类中的相应方法。构造函数
中CanExecute方法的委托是可选的。如果未指定委托,则DelegateCommand将始终为CanExecute返回
true。
DelegateCommand类是泛型类型。type参数指定传递给Execute和CanExecute方法的命令参数的类型。在前
面的示例中,command参数的类型为object。Prism还提供了非泛型版本的DelegateCommand类,以便在不
需要命令参数时使用,并定义如下:
public class ArticleViewModel
{
public DelegateCommand SubmitCommand { get; private set; }
发布评论