Github:https://github.com/PrismLibrary/Prism
Prism是C#编写的集依赖注入、XAML界面开发等功能的框架,最早用于WPF,现在可用于UWP、XForm.
Prism.MVVM命名空间,包括以下:
1.Project Prism:各平台共用的核心库
- BindableBase抽象类:实现了INotifyPropertyChanged的抽象类,ViewModel、Model类继承该类即可通过调用SetProperty<T>()实现数据绑定,重载方法可传入泛型委托Action实例来实现OnChanged回调,使用在MVVM模式下,ViewModel、Model使用该方法:
using Prism.MVVM;
public class SomeViewModel:BindableBase{
private string message = "Message to Binding";
public string Message
{
get { return message ; }
set { SetProperty(ref message , value); }
}
}
- ViewModelLocationProvider静态类,用于注册关联VM和V,为View提供ViewModel对象,根据UI XAMl依赖属性AutoWireViewModel=true,创造ViewModel的顺序为:
- 当将ViewModel类与View类注册过,则返回 _factories[viewKey],一个能创造ViewModel对象的Func委托;_factories是一个Dictionary<string, Func<object>>对象;
- 没注册过则按照惯例来创建并关联:寻找与View名称匹配的ViewModel,两者需均在各自xxxProject.Views及ViewModels子命名空间下,且ViewModel类名为View类名+Model/ViewModel(如View类名不以xxxView结束);
- 调用传入的委托对象来绑定View、ViewModel;
该类提供了2种方法来注册根据View类型的ViewModel工厂委托对象:
public static void Register<T>(Func<object> factory)
public static void Register(string viewTypeName, Func<object> factory)
该类提供了2种方法来注册View、ViewModel:
public static void Register<V, VM>()
public static void Register(string viewTypeName, Type viewModelType)
2.Project Prism.Wpf:Wpf平台库
- ViewModelLocator静态类:注册附加属性AutoWireViewModel,调用ViewModelLocationProvider.AutoWireViewModelChanged(d, Bind),传入委托方法Bind()来设置VM为View.DataContext;