返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >WPF框架Prism中使用MVVM架构
  • 155
分享到

WPF框架Prism中使用MVVM架构

2024-04-02 19:04:59 155人浏览 独家记忆
摘要

常见的MVVM框架 众所周知, 如果你了解WPF当中的ICommand, INotifyPropertyChanged的作用, 就会发现众多框架都是基于这些进行扩展, 实现其通知、绑

常见的MVVM框架

众所周知, 如果你了解WPF当中的ICommand, INotifyPropertyChanged的作用, 就会发现众多框架都是基于这些进行扩展, 实现其通知、绑定、命令等功能。

对于不同的MVVM框架而言, 大体使用上会在声明方式上的差异, 以及特定功能上的差别。

下面列举了常用的3个MVVM框架,他们的一些差异。如下所示:

功能↓ / →框架名PrismMvvmlightMicorosoft.Toolkit.Mvvm
通知BindableBaseViewModelBaseObservableObject
命令DelegateCommandRelayCommandAsync/RelayCommand
聚合器IEventAggregatorIMessengerIMessenger
模块化××
容器××
依赖注入××
导航××
对话××

正如你所见, 各个框架之间都有各自的通知、绑定、事件聚合器等基础的功能, 而Prsim自带的依赖注入、容器、以及导航会话等功能, 可以为你提供更加强大的功能。

当然,在实际的开发过程当中, 可以根据实际的功能需求, 对不同的框架选型, 同时这也需要你对各个框架之间的优缺点进行判断。

那么, 下面将主要介绍Prism当中的通知、绑定等功能。

BindableBase

如果在此之前, 你用类型mvvmlight框架, ViewModel继承的类如下:

    public class TestViewModel : ViewModelBase
    {
        private string _message;

        public string Message
        {
            get { return _message; }
            set { _message = value; RaisePropertyChanged(); }
        }
    }

在Prism当中, 你需要继承于BindableBase, 如下所示:

    public class TestViewModel : BindableBase
    {
        private string _message;

        public string Message
        {
            get { return _message; }
            set { _message = value; RaisePropertyChanged(); }
        }
    }

Command

在mvvmlight/microsoft.toolkit.mvvm中, 声明Command,如下:

    public class TestViewModel : ViewModelBase
    {
        public RelayCommand SendCommand { get; set; }

        public RelayCommand<string> SendMessageCommand { get; set; }
    }

在Prism当中, 你可以使用DelegateCommand及带参数的Command, 如下:

    public class TestViewModel : ViewModelBase
    {
        public DelegateCommand SendCommand { get; set; }

        public DelegateCommand<string> SendMessageCommand { get; set; }
    }

CompositeCommand

对于单个Command而言, 只是触发单个对应的功能, 而复合命令是Prism当中非常强大的功能, CompositeCommand简单来说是一个父命令, 它可以注册N个子命令, 如下所示:

当父命令被激活, 它将触发对所有的子命令, 如果任意一个命令CanExecute=false,它将无法被激活,如下所示:

IEventAggregator

  • 松耦合基于事件通讯
  • 多个发布者和订阅者
  • 微弱的事件
  • 过滤事件
  • 传递参数
  • 取消订阅

该功能主要作用为, 事件聚合器负责接收订阅以及发布消息。订阅者可以接收到发布者发送的内容。

例如: AViewModel订阅了一个消息接收的事件, 然后BViewModel当中给指定该事件推送消息,此时AViewModel接收BViewModel推送的内容。如下所示:

示例,下面演示如何创建订阅及发布:

//创建事件
public class SavedEvent : PubSubEvent<string> { }

//发布
IEventAggregator.GetEvent<SavedEvent>().Publish("some value");

//订阅
IEventAggregator.GetEvent<SavedEvent>().Subscribe(.Subscribe(message=>
            {
                //do something
            });

Filtering Events

在实际的开发过程当中,我们往往会在多个位置订阅一个事件, 但是对于订阅者而言, 他并不需要接收任何消息, 如下所示:

在Prism当中, 我们可以指定为事件指定过滤条件, 如下所示:

eventAggregator.GetEvent<MessageSentEvent>()
               .Subscribe(arg =>
               {
                   //do something
               },
               ThreadOption.PublisherThread,
               false,
               //设置条件为token等于“MessageListViewModel” 则接收消息
               message => message.token.Equals(nameof(MessageListViewModel)));

关于Subscribe当中的4个参数, 详解:

  • 1.action: 发布事件时执行的委托。
  • 2.ThreadOption枚举: 指定在哪个线程上接收委托回调。
  • 3.keepSubscriberReferenceAlive: 如果为true,则Prism.Events.PubSubEvent保留对订阅者的引用因此它不会收集垃圾。
  • 4.filter: 进行筛选以评估订阅者是否应接收事件。

Unsubscribe

为注册的消息取消订阅, Prism提供二种方式取消订阅,如下:

1.通过委托的方式取消订阅

var event = IEventAggregator.GetEvent<MessageSentEvent>();

event.Subscribe(OnMessageReceived);

event.Unsubscribe(OnMessageReceived);

2.通过获取订阅者token取消订阅

var _event = eventAggregator.GetEvent<MessageSentEvent>();

var token = _event.Subscribe(OnMessageReceived);

_event.Unsubscribe(token);

到此这篇关于WPF框架Prism中使用MVVM架构的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: WPF框架Prism中使用MVVM架构

本文链接: https://lsjlt.com/news/138834.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • WPF框架Prism中使用MVVM架构
    常见的MVVM框架 众所周知, 如果你了解WPF当中的ICommand, INotifyPropertyChanged的作用, 就会发现众多框架都是基于这些进行扩展, 实现其通知、绑...
    99+
    2024-04-02
  • WPF框架之Prism介绍
    什么是Prism? Prism是一个用于在 WPF、Xamarin Form、Uno 平台和 WinUI 中构建松散耦合、可维护和可测试的 XAML 应用程序框架。 Prism历史 ...
    99+
    2024-04-02
  • WPF框架Prism中ViewInjection用法介绍
    View View通常指的是, 我们定义的页面, 而在模块化的系统当中, 我们往往称之为用户控件(UserControl)。对于模块化系统而言, 每个模块当中都有N个用户控件组成, ...
    99+
    2024-04-02
  • WPF框架Prism中模块Module用法
    什么是模块(Module) 本质上来说, 对于一个应用程序而言, 特定功能的所有View、Logic、Service等都可以独立存在。那么意味着, 每个独立的功能我们都可以称之为模块...
    99+
    2024-04-02
  • WPF框架Prism中ViewModelLocator用法介绍
    建立连接 在WPF当中,需要为View与ViewModel建立连接, 我们需要找到View的DataContext, 如下所示: 建立连接的方式 如果你使用了解WPF当中如何绑定D...
    99+
    2024-04-02
  • WPF框架Prism中导航Navigation怎么使用
    这篇文章主要讲解了“WPF框架Prism中导航Navigation怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“WPF框架Prism中导航Navigation怎么使用”吧!使用场景在...
    99+
    2023-06-29
  • WPF框架Prism中区域Region怎么用
    这篇文章主要介绍WPF框架Prism中区域Region怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是区域(Region)在理解这个之前, 首先需要了解一下, 在最常见的开发模式当中, 我们去设计某个页面的...
    99+
    2023-06-29
  • WPF框架Prism中对话框Dialog用法介绍
    什么是Dialog 对话框实际上是我们应用程序经常用到的一个功能, 类如: Show、ShowDialog。 可以弹出一个我们指定的窗口, 仅此而已, 那么在Prism当中, Dia...
    99+
    2024-04-02
  • WPF引用MVVM框架与使用方法
    1.NuGet引用MVVM框架包 引入该框架包之后, 默认会在目录下创建ViewModel层的示例代码 2.第二步, 通过在MainViewModel中创建一些业务代码, 将其与...
    99+
    2024-04-02
  • WPF框架Prism中导航Navigation用法介绍
    使用场景 在普遍的业务场景当中, 必不可少的是页面切换, 而Prism就可以使用Navigation功能来进行页面导航, 在不同的场景当中会有各种用法, 例如在切换页面验证、传递参数...
    99+
    2024-04-02
  • WPF框架Prism中区域Region用法介绍
    什么是区域(Region) 在理解这个之前, 首先需要了解一下, 在最常见的开发模式当中, 我们去设计某个页面的时候, 实际上界面元素在设计的时候已经被固定。 举个简单的例子,当我们...
    99+
    2024-04-02
  • WPF使用ValidationRules对MVVM架构数据验证
    对于WPF中的验证, View验证实现起来很简单, 可以通道 Validation.ErrorEvent 冒泡传递到View的逻辑树上, 只是, 通常这样做的情况下, 我们需要为Vi...
    99+
    2024-04-02
  • WPF引用MVVM框架与使用方法是什么
    今天就跟大家聊聊有关WPF引用MVVM框架与使用方法是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.NuGet引用MVVM框架包引入该框架包之后, 默认会在目录下创建View...
    99+
    2023-06-29
  • 为WPF框架Prism注册Nlog日志服务
    无论是Nlog还是Serilog, 它们都提供了如何快速在各类应用程序当中的快速使用方法。 尽管,你现在无论是在WPF或者ASP.NET Core当中, 都可以使用ServiceCo...
    99+
    2024-04-02
  • 怎么为WPF框架Prism注册Nlog日志服务
    这篇文章主要为大家展示了“怎么为WPF框架Prism注册Nlog日志服务”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么为WPF框架Prism注册Nlog日志服务”这篇文章吧。无论是Nlog还...
    99+
    2023-06-29
  • 如何在PHP中使用MVVM框架
    随着Web应用程序的复杂性不断增加,开发人员需要寻找更好的方法来管理应用程序的结构和数据流。MVVM框架是一种流行的解决方案,可帮助开发人员更好地组织代码并实现数据双向绑定。本文将介绍如何在PHP中使用MVVM框架,让你的Web应用程序更加...
    99+
    2023-05-19
    使用 PHP MVVM框架
  • JavaScript MVVM 架构:与其他框架的比较
    模型-视图-视图模型 (MVVM) 是用于构建交互式 Web 应用程序的一种流行架构模式。它通过将应用程序状态与视图及其交互分离,实现了数据绑定和用户界面响应能力。本文旨在比较 JavaScript 中最流行的三个 MVVM 框架:An...
    99+
    2024-03-03
    MVVM、Angular、React、Vue、JavaScript 框架
  • MVVM和MVVMLight框架怎么使用
    今天小编给大家分享一下MVVM和MVVMLight框架怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、MVVM 和...
    99+
    2023-06-29
  • WPF的AvalonDock框架怎么使用
    要使用AvalonDock框架,你可以按照以下步骤进行操作:1. 首先,你需要在你的项目中引用AvalonDock框架的程序集。你可...
    99+
    2023-09-12
    WPF AvalonDock
  • Android用kotlin搭建MVVM框架(一)
    Android用kotlin搭建MVVM框架(一) 什么是MVVM搭建MVVM框架 什么是MVVM Android的项目框架,大家应该都不陌生吧。而目前的项目框架有MVC,MVP,MVVM...
    99+
    2023-10-11
    android kotlin android studio
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作