zoukankan      html  css  js  c++  java
  • WPF框架ZFS

    前文

    项目开源地址(非正式版,开发版本), 码云Gitee地址:  https://gitee.com/zhgg666/publicWpf

    XAML

    XAML能帮助团队真正实现UI与逻辑的剥离。XAML是一种单纯的声明语言,也就是说,它只能用来声明一些UI元素 ,绘制UI和动画,根本无法在其中加入程序逻辑,这就强制地把逻辑代码从UI代码分离开。这样,与UI相关的元素全部集中在程序的UI层,与逻辑相关的代码全部集中在逻辑层,形成一种'高内聚-低耦合'的结构。

    介绍

    框架, 囊括基础的用户管理、角色管理、菜单管理、字典管理、日志管理,  本篇文章主要介绍现阶段开源的ZFS框架Beta1.0的主要的特性

    设计理念

    该框架采用的是WPF MVVM架构, 遵循了WPF的数据驱动理念, 与传统的winform相比较, 事件驱动带来的各种强耦合, WPF展现了非常强大的优势, 再结合开源组件的 MaterialDesign 的风格, 使得在整体的UI元素, 过度动画

    ,与第三方的组件相比, 非常小的容量, 提供源代码,可以自行进行删减修改自定义。MaterialDesign 演示:

     

    MVVM上下文基类接口:

    该接口主要应用于关联 ViewModelXaml 页面的 DataContext 上下文对象。

    /// <summary>
        /// 主窗口接口
        /// </summary>
        public interface IModel
        {
            /// <summary>
            /// 关联数据上下文
            /// </summary>
            /// <typeparam name="TViewModel"></typeparam>
            /// <param name="viewModel"></param>
            void BindViewModel<TViewModel>(TViewModel viewModel) where TViewModel : ViewModelBase;
    
            /// <summary>
            /// 关联数据上下文(默认)
            /// </summary>
            void BindDefaultViewModel(int? authValue);
            
            /// <summary>
            /// 获取主窗口
            /// </summary>
            /// <returns></returns>
            UserControl GetView();
        }
     /// <summary>
        /// 弹窗接口
        /// </summary>
        public interface IModelDialog
        {
            /// <summary>
            /// 关联数据上下文
            /// </summary>
            /// <typeparam name="TViewModel"></typeparam>
            /// <param name="viewModel"></param>
            void BindViewModel<TViewModel>(TViewModel viewModel) where TViewModel : ViewModelBase;
            
            /// <summary>
            /// 弹出窗口
            /// </summary>
            bool? ShowDialog();
    
            /// <summary>
            /// 关闭窗口
            /// </summary>
            void Close();
    
        }

    演示登录接口的实现(继承与IModelDialog接口) 

     /// <summary>
        /// 登录窗口
        /// </summary>
        public class LoginViewDlg : ILoginDialog
        {
            private Login view;
    
            private LoginViewModel loginViewModel;
    
            /// <summary>
            /// 绑定指定ViewModel
            /// </summary>
            /// <typeparam name="TViewModel"></typeparam>
            /// <param name="viewModel"></param>
            public void BindViewModel<TViewModel>(TViewModel viewModel) where TViewModel : ViewModelBase
            {
                this.GetDialog().DataContext = viewModel;
            }
    
            /// <summary>
            /// 关闭窗口
            /// </summary>
            public void Close()
            {
                this.GetDialog().Close();
            }
    
            /// <summary>
            /// 打开窗口
            /// </summary>
            /// <returns></returns>
            public bool? ShowDialog()
            {
                return this.GetDialog().ShowDialog();
            }
    
            /// <summary>
            /// 获取窗口
            /// </summary>
            /// <returns></returns>
            public Login GetDialog()
            {
                if (view == null)
                {
                    view = new Login();
                }
                return view;
            }
        }

    调用代码

                //登陆窗口
                var Dialog = ServiceProvider.Instance.Get<ILoginDialog>();
                Dialog.BindViewModel(new LoginViewModel());
                Dialog.ShowDialog();

     注:该项目,用到了Unity容器, 所以下载项目的朋友,能在App.xaml详细中看到了项目中看到一个接口注册类

    /// <summary>
        /// Unity接口注入类
        /// </summary>
        class BootStrapper
        {
            /// <summary>
            /// 注册方法
            /// </summary>
            public static void Initialize()
            {
                ServiceProvider.RegisterServiceLocator(new UnityServiceLocator());
                ServiceProvider.Instance.Register<ILoginDialog, LoginViewDlg>();//用户登录接口
                ServiceProvider.Instance.Register<IUserDialog, UserViewDlg>();//用户弹窗接口
                ServiceProvider.Instance.Register<IGroupDialog, GroupViewDlg>();//用户组处理接口
                ServiceProvider.Instance.Register<ISkinDialog, SkinViewDlg>();//皮肤设置接口
                ServiceProvider.Instance.Register<IMainViewDialog, MainViewDlg>();//首页窗口
                ServiceProvider.Instance.Register<IMsgDialog, MsgViewDlg>();//消息处理接口
            }
        }

     MVVM底层操作基类:

      1 /// <summary>
      2     ///父功能操作基类
      3     /// </summary>
      4     public class BaseOperation : ViewModelBase, IDataOperation, IPermission
      5     {
      6         #region 属性
      7 
      8         private object currentRow;
      9         private string searchText = string.Empty;
     10         private ObservableCollection<ToolBarDefault> buttonDefaults;
     11 
     12         /// <summary>
     13         /// 搜索内容
     14         /// </summary>
     15         public string SearchText
     16         {
     17             get { return searchText; }
     18             set { searchText = value; RaisePropertyChanged(); }
     19         }
     20 
     21         /// <summary>
     22         /// 功能集合
     23         /// </summary>
     24         public ObservableCollection<ToolBarDefault> ButtonDefaults
     25         {
     26             get { return buttonDefaults; }
     27             set { buttonDefaults = value; RaisePropertyChanged(); }
     28         }
     29 
     30         /// <summary>
     31         /// 当前所选择行数据
     32         /// </summary>
     33         public object CurrentRow
     34         {
     35             get { return currentRow; }
     36             set { currentRow = value; RaisePropertyChanged(); }
     37         }
     38 
     39         #endregion
     40 
     41         #region 默认实现
     42 
     43         /// <summary>
     44         /// 初始化
     45         /// </summary>
     46         public virtual void InitViewModel()
     47         {
     48             this.SetDefaultButton();
     49             this.SetButtonAuth();
     50         }
     51 
     52         /// <summary>
     53         /// 设置默认按钮
     54         /// </summary>
     55         protected virtual void SetDefaultButton()
     56         {
     57             ButtonDefaults = new ObservableCollection<ToolBarDefault>();
     58             ButtonDefaults.Add(new ToolBarDefault() { AuthValue = Authority.ADD, ModuleName = "新增", Command = this.AddCommand });
     59             ButtonDefaults.Add(new ToolBarDefault() { AuthValue = Authority.EDIT, ModuleName = "编辑", Command = this.EditCommand });
     60             ButtonDefaults.Add(new ToolBarDefault() { AuthValue = Authority.DELETE, ModuleName = "删除", Command = this.DelCommand });
     61         }
     62 
     63         #endregion
     64 
     65         #region 功能命令
     66 
     67         private RelayCommand _addCommand;
     68         private RelayCommand _editCommand;
     69         private RelayCommand _delCommand;
     70         private RelayCommand _queryCommand;
     71         private RelayCommand _resetCommand;
     72 
     73         /// <summary>
     74         /// 新增
     75         /// </summary>
     76         public RelayCommand AddCommand
     77         {
     78             get
     79             {
     80                 if (_addCommand == null)
     81                 {
     82                     _addCommand = new RelayCommand(() => Add());
     83                 }
     84                 return _addCommand;
     85             }
     86             set { _addCommand = value; }
     87         }
     88 
     89         /// <summary>
     90         /// 编辑
     91         /// </summary>
     92         public RelayCommand EditCommand
     93         {
     94             get
     95             {
     96                 if (_editCommand == null)
     97                 {
     98                     _editCommand = new RelayCommand(() => Edit());
     99                 }
    100                 return _editCommand;
    101             }
    102             set { _editCommand = value; }
    103         }
    104 
    105         /// <summary>
    106         /// 删除
    107         /// </summary>
    108         public RelayCommand DelCommand
    109         {
    110             get
    111             {
    112                 if (_delCommand == null)
    113                 {
    114                     _delCommand = new RelayCommand(() => Del());
    115                 }
    116                 return _delCommand;
    117             }
    118             set { _delCommand = value; }
    119         }
    120 
    121         /// <summary>
    122         /// 查询
    123         /// </summary>
    124         public RelayCommand QueryCommand
    125         {
    126             get
    127             {
    128                 if (_queryCommand == null)
    129                 {
    130                     _queryCommand = new RelayCommand(() => Query());
    131                 }
    132                 return _queryCommand;
    133             }
    134             set { _queryCommand = value; }
    135         }
    136 
    137         /// <summary>
    138         /// 重置
    139         /// </summary>
    140         public RelayCommand ResetCommand
    141         {
    142             get
    143             {
    144                 if (_resetCommand == null)
    145                 {
    146                     _resetCommand = new RelayCommand(() => Reset());
    147                 }
    148                 return _resetCommand;
    149             }
    150             set { _resetCommand = value; }
    151         }
    152 
    153 
    154 
    155         #endregion
    156 
    157         #region IDataOperation接口
    158 
    159         /// <summary>
    160         /// 新增
    161         /// </summary>
    162         public virtual void Add()
    163         {
    164         }
    165 
    166         /// <summary>
    167         /// 编辑
    168         /// </summary>
    169         public virtual void Edit()
    170         {
    171         }
    172 
    173         /// <summary>
    174         /// 删除
    175         /// </summary>
    176         public virtual void Del()
    177         {
    178         }
    179 
    180         /// <summary>
    181         /// 查询
    182         /// </summary>
    183         public virtual void Query()
    184         {
    185         }
    186 
    187         /// <summary>
    188         /// 重置
    189         /// </summary>
    190         public virtual void Reset()
    191         {
    192             this.SearchText = string.Empty;
    193         }
    194 
    195         #endregion
    196 
    197         #region IPermission接口
    198 
    199         protected int? authValue;
    200 
    201         /// <summary>
    202         /// 权限值
    203         /// </summary>
    204         public int? AuthValue { get { return authValue; } set { authValue = value; } }
    205 
    206         /// <summary>
    207         /// 验证按钮权限
    208         /// </summary>
    209         /// <param name="authValue"></param>
    210         /// <returns></returns>
    211         public virtual bool GetButtonAuth(int authValue)
    212         {
    213             var def = ButtonDefaults.FirstOrDefault(t => (authValue & t.AuthValue) == t.AuthValue && t.IsVisibility.Equals(false));
    214 
    215             if (def != null)
    216                 return true;
    217             else
    218                 return false;
    219         }
    220 
    221         /// <summary>
    222         /// 设置权限
    223         /// </summary>
    224         public virtual void SetButtonAuth()
    225         {
    226             if (Loginer.LoginerUser.IsAdmin) return;
    227             
    228             foreach (var b in ButtonDefaults)
    229                 if ((this.AuthValue & b.AuthValue) != b.AuthValue)
    230                     b.IsVisibility = true; //隐藏功能
    231         }
    232 
    233         #endregion
    234     }
    View Code

    MVVM实现的结构图示例 :

    界面演示

     

    设计: 

    整套系统, 采用的开源UI组件MaterialDesign , 界面风格元素统一、动画风格遵循框架设计。

    MaterialDesign介绍:

    官网地址:http://materialdesigninxaml.net/

    gitHub地址:https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit

    模块/皮肤:

     权限管理:

     

    注:

    1.希望支持的朋友点击Star关注项目, 关注本人博客 ,长期更新。

    2.需要数据库脚本(运行必要文件) 请添加唯一交流QQ 群 : 874752819  

    3.开发工具: VS2017  +  MSSQL2012

    扫码加入:

     

  • 相关阅读:
    开放源码的对象关系映射工具ORM.NET 插入数据 Insert/Update Data
    开放源码的对象关系映射工具ORM.NET 快档开发入门 Quick Start
    .NET 动态脚本语言Script.NET 开发指南
    开放源码的对象关系映射工具ORM.NET 删除数据 Deleting Records using ORM.NET
    .NET Remoting过时了吗?为什么公司的项目还是选择用.NET Remoting,而不是WCF?
    开放源码的对象关系映射工具ORM.NET 查看和显示数据 View and Display data using ORM.NET
    开放源码的对象关系映射工具ORM.NET 查询表 调用存储过程 增加自定义代码
    技术人生:坚持,每日一博
    CQRS:CQRS + DDD + MDP 实现快速应用程序开发
    NodeJs:Happy代码生成器,重构了代码,更新了文档,完善了示例,欢迎下载使用
  • 原文地址:https://www.cnblogs.com/zh7791/p/9761935.html
Copyright © 2011-2022 走看看