C#+WPF+MVVM+导航路由+MEF(一)

2 篇文章 0 订阅

C#+WPF+MVVM+导航路由+MEF(一)

大家好!这篇文章是我在从事6年上位机开发,3年WPF开发经验后总结的一套比较实用的WPF开发方案,这篇文章比较适合初学者入门搭建属于自己的一个WPF上位机系统软件MVVM模式,初步的集成了日志,缓存,导航路由和MEF懒加载来实现插件之间的解耦。

走进WPF

WPF(Windows Presentation Foundation)是微软推出的基于Windows 的用户界面框架,属于.NET Framework 3.0的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。
wpf支持传统winfrom的编程手法,就是在页面的cs文件下直接写业务逻辑,但是这样做,很明显。无法发挥出wpf其独特的优势。就是用MVVM模式编程。实现前后端业务层面的分层解耦。

MVVM模式

MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。
例如MVC最直观的就是ASP.net的网页编程框架。
MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。微软的WPF带来了新的技术体验,如Silverlight、音频、视频、3D、动画……,这导致了软件UI层更加细节化、可定制化。同时,在技术层面,WPF也带来了 诸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由来便是MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构框架。它立足于原有MVP框架并且把WPF的新特性糅合进去,以应对客户日益复杂的需求变化。
所以说MVVM 格式是一种相当先进的和优质的编程框架。

走进第一个WPF程序

首先我们先来搭建一个我们的初步的wpf的框架。
新建项目
初次创建项目系统会出现了一个xaml页面-mainwindows。这个将是你的初始页面。
但是我们肯定是不满足只有这么一个单独的页面的。
我们依次创建我们的文件夹
Model(存放数据模型),Resources(存放资源字典和转义的类文件),Setting(存放可配置类),View(存放前端页面),ViewModel(存放后端逻辑类)
依次开始创建对应的文件
接下来我们开始创建基础的命令类,创建在Resources文件夹内。用于实现WPF 的mvvm框架的命令绑定

	/// <summary>
    /// 命令基类
    /// </summary>
    public class BaseCommand : ICommand
    {
        public event EventHandler CanExecuteChanged
        {
            add
            {
                if (_canExecute != null)
                {
                    CommandManager.RequerySuggested += value;
                }
            }
            remove
            {
                if (_canExecute != null)
                {
                    CommandManager.RequerySuggested -= value;
                }
            }
        }
        
        public bool CanExecute(object parameter)
        {
            if (_canExecute == null)
            {
                return true;
            }
            return _canExecute(parameter);
        }

        public void Execute(object parameter)
        {
            if (_execute != null && CanExecute(parameter))
            {
                _execute(parameter);
            }
        }

        private Func<object, bool> _canExecute;
        private Action<object> _execute;

        public BaseCommand(Action<object> execute, Func<object, bool> canExecute)
        {
            _execute = execute;
            _canExecute = canExecute;
        }

        public BaseCommand(Action<object> execute) :
            this(execute, null)
        {
        }

    }

要实现MVVM。我们得了解,MVVM解耦,解的是什么。一个是前端的数据。一个是前端的执行命令。
对于前端数据的解耦。我这推荐一个好用的扩展。在Nuget程序包中找到这个Fody插件,安装添加到项目中。
数据绑定
通过类名上的[AddINotifyPropertyChangedInterface]实现数据绑定。
后端逻辑类
在ViewModel的文件夹中创建MainViewModel.cs的类。这个类主要是用于处理后端的业务逻辑,同时绑定对应的命令和数据。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值