WPF Prism 7.0+ BindableBase(MVVM)
源码下载:PrismCore
Prism框架中包括 MVVM、依赖注入、Command、Message Event、导航、弹窗等功能。
Prism NuGet包
- Prism.Core 核心类
- Prism.Wpf 表现层相关(基于Prism.Core)
- Prism框架提供了两种具体的IOC依赖注入框架,分别是DryIOC和Unity
- Prism.Unity 容器相关(基于Prism.Core、Prism.Wpf)
- Prism.DryIoc 控制反转(基于Prism.Core、Prism.Wpf),容器-->需要什么对象,创建什么对象
- Unity.Microsoft.DependencyInjection 依赖注入
Prism知识章节
- Region(区域管理)
- Module(模块)
- View Injection(视图注入)
- ViewModelLocationProvider(视图模型定位)
- Command(绑定相关)
- Event Aggregator (事件聚合器)
- Navigation(导航)
- Dialog(对话框)
第一步:通过GetNut管理器,导入Prism.Unity 和 Prism.DryIoc
一、使用Prism框架
XAML 代码:
<prism:PrismApplication x:Class="Micro.Ui.PrismCoreStyle.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:Micro.Ui.PrismCoreStyle" xmlns:prism="http://prismlibrary.com/"> <Application.Resources> </Application.Resources> </prism:PrismApplication>
注:App.xaml中,删除 StartupUri="MainWindow.xaml",使用Prism启动窗体;
C# 代码:
using Prism.Ioc; using Prism.DryIoc; namespace Micro.Ui.PrismCoreStyle { public partial class App : PrismApplication { // Window窗体, StartupUri可以启动一个窗体 // CreateShell()主要负责启动一个主页面 protected override Window CreateShell() { // 启动一个窗体MainWindow return Container.Resolve<MainWindow>(); } protected override void RegisterTypes(IContainerRegistry containerRegistry) { } } }
XAML:
<TextBox Height="28" Width="280" Text="{Binding Name}"/>
二、Prism实现MVVM
1)继承接口:BindableBase
2)数据同步方法:RaisePropertyChanged();
3)创建命令 :DelegateCommand
using Prism.Mvvm; namespace Micro.Ui.PrismCoreStyle.ViewModels { public class MainWindowViewModel : BindableBase { /// <summary> /// 保存命令 /// </summary> private DelegateCommand<Page>? _saveCommand; public DelegateCommand<Page> SaveCommand { get { if (_saveCommand == null) { _saveCommand = new DelegateCommand<Page>(new Action<Page>((page) => { })); } return _saveCommand; } } /// <summary> /// Guid /// </summary> private string _id = Guid.NewGuid().ToString(); public string Id { get { return _id; } set { SetProperty(ref _id, value); } } /// <summary> /// 名称 /// </summary> private string _name = string.Empty; public string Name { get { return _name; } //数据同步方法:RaisePropertyChanged(); set { _name = value; RaisePropertyChanged(); } } } }
三、实现自动绑定ViewModel
必须要满足的条件:
1)窗体|页面|用户控件必须放到Views文件夹下
2)模型必须放到ViewModels文件夹下
3)模型名称的名称,必须是窗体名称开头,且以ViewModel结尾
满足以上三条,不需要手动绑定DataContext,实现自动绑定ViewModel。
另注意:xaml中prism命名空间的设置,自动绑定设置(可省略)
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
https://www.cnblogs.com/swbna/p/17538859.html
https://blog.csdn.net/qq_48492162/article/details/131977507