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月前
|
算法 Python
Python基础教程(第3版)中文版 第一章 快速上手:基础知识(笔记)
Python基础教程(第3版)中文版 第一章 快速上手:基础知识(笔记)
|
程序员 数据库 开发者
Sanic中文教程合集:免费下载
Sanic中文教程合集:免费下载
Sanic中文教程合集:免费下载
|
JavaScript 安全 前端开发
【超详细】Zod 入门教程
Zod 是一个以 TypeScript 为首的模式声明和验证库 ,弥补了 TypeScript 无法在运行时进行校验的问题 ,既可以用在服务端也可以运行在客户端,以保障 Web Apps 的类型安全
565 0
【超详细】Zod 入门教程
|
JSON 自然语言处理 JavaScript
TypeChat 入门指南
TypeChat 是一个革命性的库,它简化了使用 TypeScript 构建自然语言模型界面的过程。 它抹平了自然语言和结构化数据之间的差距,使开发人员更容易将自然语言界面集成到他们的应用程序中。
384 0
|
存储 Web App开发 移动开发
Day 19: EmberJS 入门指南
到目前为止,我们这一系列文章涉及了Bower、AngularJS、GruntJS、PhoneGap和MeteorJS 这些JavaScript技术。今天我打算学习一个名为Ember的框架。本文将介绍如何用Ember创建一个单页面的社交化书签应用。本教程将包括两篇:第1篇介绍客户端代码和用HTML 5本地存储持久保存数据,第2篇中我们将使用一个部署在OpenShift上的REST后端。过几天我会写第2篇。
339 0
Day 19: EmberJS 入门指南
|
JavaScript NoSQL 前端开发
手把手教你如何使用NodeJs和JavaScript开发微信公众号(二)
手把手教你如何使用NodeJs和JavaScript开发微信公众号
387 0
手把手教你如何使用NodeJs和JavaScript开发微信公众号(二)
|
JavaScript 前端开发
手把手带你快速入门Electron
## 看完本文你可学会📢 - 对于electron有一些基本认识 - 能够了解到electron的各个模块的基本作用 - 了解进程通信,如何进行互相通信 - 逐渐学会整活(~~这个才是目的~~)
|
算法 Linux 网络安全
Canokey入门指南:F2A、OpenPGP、PIV
相信大伙都知道yubikey吧,那么Canokey呢?
1805 0
|
移动开发 缓存 小程序
UNIAPP入门教程
UNIAPP入门教程
783 0