WPF Prism 7.0+ BindableBase(MVVM)

源码下载:PrismCore

Prism框架中包括 MVVM、依赖注入、Command、Message Event、导航、弹窗等功能。

Prism NuGet包

  1. Prism.Core 核心类
  2. Prism.Wpf 表现层相关(基于Prism.Core)
  3. Prism框架提供了两种具体的IOC依赖注入框架,分别是DryIOC和Unity
  4. Prism.Unity 容器相关(基于Prism.Core、Prism.Wpf)
  5. Prism.DryIoc 控制反转(基于Prism.Core、Prism.Wpf),容器-->需要什么对象,创建什么对象
  6. Unity.Microsoft.DependencyInjection  依赖注入

Prism知识章节

  1. Region(区域管理)
  2. Module(模块)
  3. View Injection(视图注入)
  4. ViewModelLocationProvider(视图模型定位)
  5. Command(绑定相关)
  6. Event Aggregator (事件聚合器)
  7. Navigation(导航)
  8. 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

 

posted @ 2021-05-14 12:34  microsoft-zhcn  阅读(164)  评论(0编辑  收藏  举报