WPF Prism框架搭建
1.引入Prism框架
在Nuget包管理器中搜索Prism,并添加到项目中
2.在项目中使用prism框架
2.1 修改app.xaml
-
删除项目中自带的StartupUri
-
修改Application节点为prism:PrismApplication
-
引入prism命名空间
<prism:PrismApplication x:Class="WpfPrismSimple.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfPrismSimple"
xmlns:prism="http://prismlibrary.com/">
<Application.Resources>
<ResourceDictionary>
<!-- 全局样式 -->
...
<ResourceDictionary.MergedDictionaries>
<!-- 样式模板 -->
...
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</prism:PrismApplication>
2.2 修改app.xaml.cs
- 将原继承的Application替换成PrismApplication
- 实现PrismApplication的抽象方法
CreateShell
RegisterTypes
- 使用容器构建界面显示
public partial class App : PrismApplication
{
protected override Window CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
}
}
2.3 基类报错的解决方式
如果出现 error CS0263: “App”的分部声明一定不能指定不同的基类
的错误,就使用下面的方式解决
- 创建自定义类
MyPrismApplication
继承自Prism.Unity.PrismApplication
- 在app.cs中继承自
MyPrismApplication
- 修改对应的xaml引用
app.cs.xaml
<prism:MyPrismApplicationx:Class="WpfPrismSimple.App"
xmlns:prism="clr-namespace:CCTVControl.Common">
...
</prism:PrismApplication>
cs类
public class MyPrismApplication : Prism.Unity.PrismApplication
{
protected override Window CreateShell()
{
throw new NotImplementedException();
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
throw new NotImplementedException();
}
}
public partial class App : MyPrismApplication
{
...
}
3.实现Mvvm
3.1 View和ViewModel自动关联
-
View文件必须放在Views文件夹下,ViewModel文件必须放在ViewModels文件夹下
-
ViewModel命名必须是View文件名称+ViewModel结尾
-
View文件的xaml中需要增加自动关联属性
xmlns:prism="http://prismlibrary.com/" xmlns:prism="http://prismlibrary.com/" prism:ViewModelLocator.AutoWireViewModel="True"
3.2 View和ViewModel手动关联
- 通过手动在App类中的RegisterTypes方法中关联View和ViewModel
protected