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


相关文章
|
4月前
|
C#
C#入门
C#入门
33 0
|
6月前
|
编译器 程序员 C语言
C++入门
C++入门
43 5
|
存储 安全 编译器
|
9月前
|
消息中间件 网络协议
cppzmq入门
cppzmq入门
154 2
|
9月前
|
开发框架 IDE .NET
c#入门必看
c#入门必看
68 0
|
9月前
|
编译器 C语言 C++
【c++】入门1
【c++】入门1
54 2
|
9月前
|
Kubernetes 开发工具 Docker
K8S 极速入门
K8S 极速入门
105 0
|
Web App开发 移动开发 IDE
laya入门,这一篇应该够了
laya入门,这一篇应该够了
5377 1
|
存储 Java
ASN.1入门(超详细)
ASN.1(Abstract Syntax Notation dotone),抽象语法标记1。是定义抽象数据类型形式的标准,描绘了与任何表示数据的编码技术无关的通用数据结构。抽象语法使得人们能够定义数据类型,并指明这些类型的值。抽象语法只描述数据的结构形式,与具体的编码格式无关,同时也不涉及这些数据结构在计算机内如何存放。
1192 0
|
存储 安全 小程序
c++入门(下)
c++入门(下)