MVVMToolkit入门教程

简介: MVVMLight已经停止维护,可以考虑MVVMToolkit来替代,MVVMToolkit官方文档两个框架的基本使用方法类似,下面介绍一下不同之处(建议查看一下上一篇关于MVVMLight的文章)。

MVVMToolkit

MVVMLight已经停止维护,可以考虑MVVMToolkit来替代,MVVMToolkit官方文档两个框架的基本使用方法类似,下面介绍一下不同之处。

Messenger

//发送

WeakReferenceMessenger.Default.Send<string>("hello");

//注册1

WeakReferenceMessenger.Default.Register<string>(this, DoMessage);

//注册2

WeakReferenceMessenger.Default.Register<MessageObject>(this, DoMessage);

//注册3,不需要Register

//类的继承,使用ObservableRecipient替换ObservableObject,并继承IRecipient接口

//用来接收消息,这样就不需要注册

//必须打开消息开关

this.IsActive=true;

publicvoidReceive(stringmessage)

{

  //凡是相应类型的都可以收到信息

  //如何实现精准接收,要自定义一个类

}

IoC

仿照MVVMLight,新建ViewModelLocator类。

需要nuget安装Microsoft.Extensions.DependencyInjection

publicclassViewModelLocator

{

    publicstaticIServiceProviderserviceProvider { get; privateset; }

    publicViewModelLocator()

    {

        serviceProvider=GetService();

    }

   privateIServiceProviderGetService()

    {

        //实例化容器对象

        varservice=newServiceCollection();

        //注册项目需要的对象

        service.AddSingleton<MainViewModel>();

        returnservice.BuildServiceProvider();

    }

    publicMainViewModelMain

    {

        get=>serviceProvider.GetService<MainViewModel>();

    }

}

App.xmal

<Application.Resources>

   <vm:ViewModelLocatorx:Key="Locator"/>

</Application.Resources>

window.xaml中使用

DataContext="{Binding Source={StaticResource Locator},Path=Main}"

AsnycRelayCommand

异步命令

publicICommandBtnCommand { set; get; }

//异步命令必须在构造方法中创建

BtnCommand=newAsyncRelayCommand(DoCommand);

privateasyncTask<String>DoCommand()

{

   awaitTask.Delay(3000);

   return"hello";

}

如果在页面要获取异步命令的返回值,需要做一个转换

publicclassTaskResultConverter : IValueConverter

{

   publicobjectConvert(objectvalue, TypetargetType, objectparameter, CultureInfoculture)

   {

       if (valueisTasktask)

       {

           //  安装了Microsoft.Toolkit

           returntask.GetResultOrDefault();

       }

       returnnull;

   }

   publicobjectConvertBack(objectvalue, TypetargetType, objectparameter, CultureInfoculture)

   {

       thrownewNotImplementedException();

   }

}

页面

<Window.Resources>

   <local:TaskResultConverterx:Key="taskResult"/>

</Window.Resources>

<TextBlockText="{Binding BtnCommand.ExecutionTask, Converter={StaticResource taskResult}}"/>

<ButtonCommand="{Binding BtnCommand}"Content="OK"/>


相关文章
|
5月前
|
存储 机器学习/深度学习 人工智能
软考中级软件设计师专项-数据结构与算法上篇
软件设计师考试数据结构模块涵盖数组、链表、栈、队列、树、图等基础结构及其操作,重点考查二分查找、快排与归并排序、树/图的DFS/BFS遍历算法,要求掌握时间与空间复杂度分析,理解哈希、堆的应用场景,强调通过合理选择数据结构优化程序性能,解决存储管理与计算效率问题,为系统设计奠定核心逻辑基础。
621 1
软考中级软件设计师专项-数据结构与算法上篇
|
4月前
|
JavaScript 前端开发 API
从零开始:开发你的第一个Zotero插件
本文介绍如何从零开始开发Zotero插件,涵盖环境搭建、核心架构、功能实现与发布流程,助你为这一开源文献管理工具贡献定制化功能。
|
5月前
|
存储 自然语言处理 搜索推荐
从音频与照片生成数字人视频:阿里云百炼工作流打造“超级数字人”全流程解析
阿里云百炼上线通义万相2.2数字人视频生成模型S2V,支持音频+单张人像生成个性化数字人视频。结合Qwen-TTS、Qwen-Image与IMS智能剪辑,打造从内容生成到视频输出的全自动“超级数字人”工作流,大幅提升制作效率与质量。
1706 2
|
机器学习/深度学习 人工智能 运维
智能运维:AI驱动的IT运维革命###
【10月更文挑战第21天】 随着数字化转型的深入,智能运维(AIOps)正逐步成为企业IT管理的核心。本文将探讨AI技术如何赋能运维领域,通过自动化、智能化手段提升系统稳定性和效率,降低运营成本,并分享实施智能运维的最佳实践与挑战应对策略。 ###
1037 1
|
测试技术 API 开发者
精通.NET单元测试:MSTest、xUnit、NUnit全面解析
【10月更文挑战第15天】本文介绍了.NET生态系统中最流行的三种单元测试框架:MSTest、xUnit和NUnit。通过示例代码展示了每种框架的基本用法和特点,帮助开发者根据项目需求和个人偏好选择合适的测试工具。
566 3
|
存储 缓存 监控
深入理解Java线程池ThreadPoolExcutor实现原理、数据结构和算法(源码解析)
Java线程池的核心组件包括核心线程数、最大线程数、队列容量、拒绝策略等。核心线程数是线程池长期维持的线程数量,即使这些线程处于空闲状态也不会被销毁;最大线程数则是线程池允许的最大线程数量,当任务队列已满且当前线程数未达到最大线程数时,线程池会创建新线程执行任务;队列容量决定了任务队列的最大长度,当新任务到来时,如果当前线程数已达到核心线程数且队列未满,任务将被放入队列等待执行;拒绝策略则定义了当线程池无法处理新任务时的行为,如抛出异常、丢弃任务等。
398 1
|
设计模式 开发框架 前端开发
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(1)
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(1)
|
C# 开发者 Windows
一款基于Fluent设计风格、现代化的WPF UI控件库
一款基于Fluent设计风格、现代化的WPF UI控件库
533 1
LabVIEW创建自定义输入控件、显示控件和自定义类型1
LabVIEW创建自定义输入控件、显示控件和自定义类型1
719 1
|
前端开发 JavaScript Android开发
使用React Native开发跨平台移动应用的技术详解
【5月更文挑战第22天】本文详述了使用React Native开发跨平台移动应用的技术,该框架由Facebook推出,基于JavaScript,支持iOS和Android。React Native通过JNI/JSI实现JavaScript到原生代码的转换,提供高效性能和原生体验。其优势包括跨平台性、原生体验、开发速度及社区支持。开发流程涉及环境搭建、项目创建、编码、调试与测试,以及构建与发布。注意事项包括性能优化、平台适配、利用第三方库和持续学习。React Native为开发者构建高质量跨平台应用提供了便捷途径,未来潜力无限。