14.prism框架知识(1)
使用在多个平台的MVVM框架
新建WPF项目prismDemo
项目中:工具-NuGet包管理:安装Prism.DryIoc框架
在git中能看Prism的结构和源代码:git链接地址
例如:Prism/src/Wpf/Prism.DryIoc.Wpf/PrismApplication.cs这个类,就是在我们自己的prismDemo项目中需要更改继承使用。
报错:加上(更改)以下三行,重新生成并实现抽象类,上图报错即解决。
抽象类的实现:
管理扩展:添加"Prism Template Pack",就不用每次新建项目都添加一次prism了
添加扩展之后重新打开VS,新建项目:
打开之后就包含有prism和一些项目文件结构:
15.prism区域介绍(2)
主要内容:区域的概念和使用方法。
prism界面(.xaml文件中)中划分区域,可放入容器或者控件(动态的)
在.xaml中加入不同的子模块:(添加xsml子模块-主页面.png)
在views中新加三个用户控件:page1,page2,page3
现需要点击不同的按钮进入不同的页面:在ViewModels文件夹中修改MainWindowViewModel.cs文件:
public class MainWindowViewModel : BindableBase
{
//执行不同的模块
public DelegateCommand<string> OpenCommand {
get; private set; }
public MainWindowViewModel()
{
//执行不同的模块
OpenCommand = new DelegateCommand<string>(Open);
}
private void Open(string obj)
{
switch (obj)
{
case "viewA": break;
case "viewB": break;
case "viewC": break;
}
}
}
绑定:.xaml中加入Content参数,进行绑定,传递参数用:CommandParameter参数
<StackPanel Orientation="Horizontal">
<Button Margin="5" Content="打开模块A" Command="{Binding OpenCommand}" CommandParameter="viewA"/>
<Button Margin="5" Content="打开模块B" Command="{Binding OpenCommand}" CommandParameter="viewB"/>
<Button Margin="5" Content="打开模块C" Command="{Binding OpenCommand}" CommandParameter="viewC"/>
</StackPanel>
<!--需要在.cs文件中连接需要使用Content-->
<ContentControl Grid.Row="1" Content="{Binding Body}"/>
连接的Body的使用方式:在MainWindowViewModel.cs文件中
//定义一个跟MainWindow.xaml中绑定对应的Body
private object body;
public object Body
{
get {
return body; }
set {
body = value; RaisePropertyChanged(); }
}
....
//使用:
private void Open(string obj)
{
switch (obj)
{
case "viewA": Body = new Page1(); break; //此处使用
case "viewB": Body = new Page2(); break; //此处使用
case "viewC": Body = new Page3(); break; //此处使用
}
}
(以上使用到Prism框架的自动查找上下文功能(views – viewModels))功能完成。
发现问题:view页面和viewModel后端处理,耦合性较大。需要降低耦合性------解决方式:使用prism插件:
在MainWindow.xaml中,需要注意prism的扩展插件自动生成了以下代码,注意不要重复添加,会报错。
<ContentControl prism:RegionManager.RegionName="ContentRegion"/>
<!--ui界面第二行内容-->
<!--需要在.cs文件中连接需要使用Content-->
<!<