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"/>


相关文章
|
前端开发 IDE 编译器
HBuilderX 最新安装使用教程,附详细图解,持续更新
HBuilderX 最新安装使用教程,附详细图解,持续更新
|
6月前
AutoLisp入门教程
AutoLisp入门教程
|
7月前
|
IDE Java 应用服务中间件
第一章:入门、安装、配置
第一章:入门、安装、配置
|
7月前
|
消息中间件 运维 关系型数据库
KnowStreaming系列教程第一篇——安装和使用
KnowStreaming系列教程第一篇——安装和使用
483 0
|
JavaScript 安全 前端开发
【超详细】Zod 入门教程
Zod 是一个以 TypeScript 为首的模式声明和验证库 ,弥补了 TypeScript 无法在运行时进行校验的问题 ,既可以用在服务端也可以运行在客户端,以保障 Web Apps 的类型安全
584 0
【超详细】Zod 入门教程
|
前端开发 中间件 C#
(1)入门MasaFramework教程
(1)入门MasaFramework教程
217 0
|
C++
qt开发从入门到实战1
qt开发从入门到实战1
219 1
qt开发从入门到实战1
|
移动开发 JavaScript 前端开发
手把手教你如何使用NodeJs和JavaScript开发微信公众号(一)
手把手教你如何使用NodeJs和JavaScript开发微信公众号
365 0
手把手教你如何使用NodeJs和JavaScript开发微信公众号(一)
|
前端开发 JavaScript API
手把手教你如何使用NodeJs和JavaScript开发微信公众号(三)
手把手教你如何使用NodeJs和JavaScript开发微信公众号
209 0
手把手教你如何使用NodeJs和JavaScript开发微信公众号(三)
|
JavaScript NoSQL 前端开发
手把手教你如何使用NodeJs和JavaScript开发微信公众号(二)
手把手教你如何使用NodeJs和JavaScript开发微信公众号
402 0
手把手教你如何使用NodeJs和JavaScript开发微信公众号(二)
下一篇
DataWorks