WPF Prism框架之绑定

介绍

Prism提供了一组设计模式的实现,有助于编写结构良好的且可维护的XAML应用程序, 包括MVVM、依赖注入、命令、事件聚合器等。
核心:MVVM实现
支持平台:Prism.WPF、Prism.Forms、Prism.Uno
内置IOC:Autofac、DryIoc、Mef Ninject、StructureMap、Unity。最新8.0版本只保留了DryIoc和Unity。
官网:https://prismlibrary.com/
源码地址:https://github.com/PrismLibrary/Prism

针对WPF的Prism框架

Prism.Core:实现MVVM的核心功能,属于一个与平台无关的项目【Prism.dll】
Prism.Wpf:包含了DialogService、Region、Module、Navigation,其他的一些WPF的功能【Prism.Wpf.dll】
Prism.Unity:Ioc容器,比DryIoc使用市场更大一些【Prism.Unity.Wpf.dll】

在这里插入图片描述

Prism框架初始化

1、8.0以前版本—PrismBootstrapper
    public class Bootstrapper : PrismBootstrapper
    {
        protected override DependencyObject CreateShell()
        {
            return Container.Resolve<FirstWindow>();
        }
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {      
        
        }
    }
    public partial class App
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            var bs = new Bootstrapper();
            bs.Run();
        }
    }
2、8.0版本—PrismApplication
    public partial class App : PrismApplication
    {
        protected override Window CreateShell()
        {
            return Container.Resolve<FirstWindow>();
        }

        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            //Ioc本质为对象集合,存相关的Type,取根据Type进行反射
        }
    }

View和ViewModel关联

1、自动关联

设置属性:prism:ViewModelLocator.AutoWireViewModel="True“
(1)必须是Views和ViewModels目录
(2)ViewModel必须以View的名称+”ViewModel”进行命名

2、自定义文件名关联规则
	public partial class App : PrismApplication
    {
        protected override void ConfigureViewModelLocator()
        {
            base.ConfigureViewModelLocator();
            
            ///自定义ViewModel文件后缀,自动匹配
            ViewModelLocationProvider.SetDefaultViewTypeToViewModelTypeResolver((viewType) =>
            {
                //DemoViews.FirstWindow => DemoViewModels.FirstWindowVM
                var viewName = viewType.FullName.Replace("DemoViews", "DemoViewModels");
                var viewAssemblyName = viewType.Assembly.FullName;
                var viewModelName = $"{viewName}VM,{viewAssemblyName}";
                return Type.GetType(viewModelName);
            });
        }
    }
3、直接代码一对一关联
	public partial class App : PrismApplication
    {
        protected override void ConfigureViewModelLocator()
        {
            base.ConfigureViewModelLocator();
            
            /// 一对一注册
            ViewModelLocationProvider.Register(typeof(FirstWindow).ToString(), typeof(FirstWindowVM));
            ViewModelLocationProvider.Register(typeof(FirstWindow).ToString(),
                () => Container.Resolve<FirstWindowVM>()
            );
            ViewModelLocationProvider.Register<FirstWindow, FirstWindowVM>();
        }
    }
4、Xaml中设置DataContext
    <Window.DataContext>
        <prism:ContainerProvider Type="{x:Type vm:FirstWindowVM}"/>
    </Window.DataContext>

Prism框架对象BindableBase

1、RaisePropertyChanged
		private string myVar;   
		  
        public string MyProperty
        {
            get { return myVar; }
            set
            {
                myVar = value;
                this.RaisePropertyChanged();
            }
        }
		private string myVar;   
		  
        public string MyProperty
        {
            get { return myVar; }
            set
            {
                myVar = value;
                // 通知其他属性
                this.RaisePropertyChanged("其他属性名称");
            }
        }
2、SetProperty
		private string myVar;   
		  
        public string MyProperty
        {
            get { return myVar; }
            set
            {
                //this.SetProperty(ref myVar, value);
                this.SetProperty(ref myVar, value, "MyProperty");
            }
        }
		private string myVar;   
		  
        public string MyProperty
        {
            get { return myVar; }
            set
            {
                this.SetProperty<string>(ref myVar, value,
                    () =>
                    {
                        //值改变的时候会触发,不改变不触发,onChanged
                    });
            }
        }

ErrorsContainer对象使用

Prism中提供的做数据验证时的一种方式,更推荐采用属性值上加特性来实现(更方便)。

    //处理数据、值验证(ErrorsContainer)
    public class FirstWindowVM : BindableBase, INotifyDataErrorInfo
    {
        private string myVar;
        
        public string MyProperty
        {
            get { return myVar; }
            set
            {
                this.SetProperty<string>(ref myVar, value,
                    () =>
                    {
                        //  onChanged
                    });
                    
                // 基于ErrorsContainer的数据校验方式
                if (value == "1231")
                {
                    // 异常消息
                    ErrorsContainer.SetErrors("MyProperty", new string[] { "输入值无效1231231" });
                }
                else
                {
                    ErrorsContainer.ClearErrors("MyProperty");
                }
            }
        }

        private ErrorsContainer<string> errorsContainer;

        public ErrorsContainer<string> ErrorsContainer
        {
            get
            {
                if (errorsContainer == null)
                    errorsContainer = new ErrorsContainer<string>((propName) =>
                    {
                        //异常信息的处理
                        ErrorsChanged?.Invoke(this, new DataErrorsChangedEventArgs(propName));
                    });

                return errorsContainer;
            }
            set { errorsContainer = value; }
        }
        
        /// <summary>
        /// INotifyDataErrorInfo 接口方法
        /// </summary>
        public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;
        public bool HasErrors => ErrorsContainer.HasErrors;
        public IEnumerable GetErrors(string propertyName) => ErrorsContainer.GetErrors(propertyName);
    }
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: WPF Prism是一个用于开发灵活、可扩展和可测试的WPF应用程序的框架。在WPF Prism中,权限框架起着重要的作用,用于控制用户在应用程序中的访问权限。 权限框架的目的是确保用户只能访问他们被授权的功能和数据。在WPF Prism中,权限框架通过将权限信息与模块和视图进行关联来实现这一目标。权限信息可以定义为角色、用户、权限等。 在WPF Prism中,可以使用属性和方法来定义权限信息。通过为模块和视图添加属性,可以指定这些模块和视图所需的权限。然后,可以使用权限框架来检查当前用户是否具有执行这些模块和视图的权限。如果用户没有所需的权限,可以采取相应的行动,例如禁用按钮、隐藏视图等。 WPF Prism的权限框架还允许对用户进行身份验证,以确保只有经过身份验证的用户才能登录和使用应用程序。身份验证是通过使用用户名和密码等凭据进行的,以验证用户的身份。一旦用户通过身份验证,权限框架可以根据用户的角色和权限确定其可访问的功能和数据。 另外,WPF Prism的权限框架还支持动态权限管理。这意味着可以根据特定条件或用户角色的变化来动态地更新和调整用户的权限。例如,当用户升级到更高级别的用户角色,可以动态地添加或删除其相关的权限。 总而言之,WPF Prism的权限框架为开发人员提供了一种灵活且可扩展的方式来管理用户的访问权限。通过使用权限框架,可以确保只有经过授权的用户才能访问所需的功能和数据,提高应用程序的安全性和可用性。 ### 回答2: WPF Prism 是一个用于开发模块化、可扩展的 WPF 应用程序的框架。它提供了一种在应用程序中实现权限管理的方法。 在 WPF Prism 中,权限框架是通过使用模块化的方式实现的。每个模块都可以定义自己的权限,然后在应用程序中根据用户的角色或权限来动态加载和展示模块。 实现权限框架的方法可以有很多种,以下是一种常用的做法: 1. 在应用程序启动,加载用户信息并确定用户的角色或权限。 2. 在每个模块的初始化过程中,根据用户的角色或权限来判断是否需要加载该模块。 3. 在加载模块,可以使用 Prism 提供的导航服务来控制模块的访问权限。通过配置导航菜单和页面权限,实现页面的动态加载和展示。 4. 可以使用身份验证服务来验证用户的身份和权限。可以自定义身份验证服务,根据具体的业务规则来判断用户是否有权限进行某个操作。 5. 在界面上可以通过使用可见性绑定和命令绑定来控制用户对不同控件或操作的权限。根据用户的角色或权限来控制控件的可见性和是否启用某个操作。 总之,使用 WPF Prism 框架可以很轻松地实现一个灵活的权限框架。开发人员可以定义各个模块的权限,根据用户的角色或权限来动态加载和展示模块,同可以使用身份验证服务和可见性绑定来控制用户访问界面和操作的权限。 ### 回答3: WPF Prism是一种用于构建模块化、可扩展、可重用的WPF应用程序的框架。在WPF Prism中,可以使用权限框架来实现对应用程序中各个模块或页面的访问权限控制。 权限框架主要涉及两个方面的功能:访问控制和权限管理。 在访问控制方面,权限框架可以定义不同的用户类型或角色,并为每个角色分配不同的权限级别。通过在应用程序中的模块或页面上设置特定的权限要求,可以限制只有具有相应权限的用户才能访问或执行特定的功能。这样可以保证敏感信息只对特定用户开放,并提供更好的安全性。 在权限管理方面,权限框架提供了一种机制来管理和维护用户的权限设置。管理员可以使用权限管理界面对不同用户的权限进行配置,并可以根据实际需要进行权限的增加、删除、修改等操作。这样可以方便地进行权限的维护和管理,同也能够及响应用户权限的变更需求。 此外,权限框架还可以提供权限验证和异常处理等功能,以确保在用户尝试访问没有权限的功能能够给予相应的提示或进行适当的处理。 总的来说,WPF Prism的权限框架为应用程序提供了一种有效的权限控制机制,可以帮助开发人员实现精细化的权限管理和访问控制,提高应用程序的安全性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值