首页 > 其他分享 >MVVMToolkit入门教程

MVVMToolkit入门教程

时间:2023-02-26 14:07:45浏览次数:46  
标签:object return MVVMToolkit 入门教程 注册 NET public


MVVMToolkit

MVVMLight已经停止维护,可以考虑MVVMToolkit来替代,​​MVVMToolkit官方文档​​​两个框架的基本使用方法类似,下面介绍一下不同之处(建议先看上篇介绍MVVMLight的文章)。
MVVMToolkit是一个现代、快速且模块化的 MVVM 库。 它是 .NET 社区工具包的一部分,
平台和运行时独立 - .NET Standard 2.0、 .NET Standard 2.1 和 .NET 6。易于选取和使用,没有严格的要求,灵活使用。

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;
public void Receive(string message)
{
//凡是相应类型的都可以收到信息
//如何实现精准接收,要自定义一个类
}

IoC

仿照MVVMLight,新建​​ViewModelLocator​​类。

需要nuget安装​​Microsoft.Extensions.DependencyInjection​

public class ViewModelLocator
{
public static IServiceProvider serviceProvider { get; private set; }
public ViewModelLocator()
{
serviceProvider = GetService();
}

private IServiceProvider GetService()
{
//实例化容器对象
var service = new ServiceCollection();

//注册项目需要的对象

service.AddSingleton<MainViewModel>();
return service.BuildServiceProvider();
}

public MainViewModel Main
{
get => serviceProvider.GetService<MainViewModel>();
}
}

App.xmal

<Application.Resources>
<vm:ViewModelLocator x:Key="Locator" />
</Application.Resources>

window.xaml中使用

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

AsnycRelayCommand

异步命令

public ICommand BtnCommand { set; get; }
//异步命令必须在构造方法中创建
BtnCommand = new AsyncRelayCommand(DoCommand);
private async Task<String> DoCommand()
{
await Task.Delay(3000);
return "hello";
}

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

public class TaskResultConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is Task task)
{
// 安装了Microsoft.Toolkit
return task.GetResultOrDefault();
}
return null;
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}

页面

<Window.Resources>
<local:TaskResultConverter x:Key="taskResult" />
</Window.Resources>
<TextBlock Text="{Binding BtnCommand.ExecutionTask, Converter={StaticResource taskResult}}" />
<Button Command="{Binding BtnCommand}" Content="OK" />


标签:object,return,MVVMToolkit,入门教程,注册,NET,public
From: https://blog.51cto.com/u_15943685/6086421

相关文章

  • java security 详解_Spring Security入门教程
    SpringSecurity的简单使用简介SSM整合Security是比较麻烦的,虽然Security的功能比Shiro强大,相反却没有Shiro的使用量多SpringBoot出现后简化了Spring系列的配置......
  • Cypress简易入门教程
    每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试,领取资料可加:magetest码同学抖音号:小码哥聊软件测试 01Wind......
  • 【GIT教程】一、GIT简易命令行入门教程
    一、创建仓库在注册完成并成功登录Gitee账号后,用户可以开始创建自己的第一个仓库。1、通过网站右上角的「+」号,选择「新建仓库」,进入新建仓库页面2、在新建仓库页面......
  • Blender 图像软件入门教程 导出glb ,gltf格式文件 blender导入glb格式文件
    环境:3.4.1实现功能:导出glb格式文件点击视图左上方文件按钮,点击导出,点击gltf2.0(.glb/gltf)  blender导入glb格式文件视图右上方,选择Collection,鼠标右键,点击删除......
  • 树莓派新手入门教程 - node下使用gpio
    [b]安装Node[/b]为了运行Node脚本,树莓派必须安装Node,可以参考[url=http://thisdavej.com/beginners-guide-to-installing-node-js-on-a-raspberr......
  • CDH入门教程1-1
    CDH入门教程1-2采集模块安装第2章数据采集模块安装2.1HDFS、YARN、Zookeeper安装2.1.1选择自定义安装2.1.2选择安装服务2.1.3分配节点2.1.4集群设置全部选默认即可......
  • CDH入门教程2
    CDH入门教程2第3章数据仓库模块安装3.1Hive安装3.1.1添加服务3.1.2添加Hive服务3.1.3将Hive服务添加到Cluster13.1.4配置hive元数据3.1.5测试通过后继续3.1.6......
  • CDH入门教程3
    CDH入门教程3第5章卸载CDH(了解)集群出现错误异常时,再按照本章步骤操作。但是卸载CDH,重新安装只可以解决部分报错,一些极个别顽固报错还是有可能解决不了,所以如果同学们在安......
  • 大爽Python入门教程 2-7 *拓展实践,对比与思考
    大爽Python入门公开课教案点击查看教程总目录本文偏难。推荐等第一二三四章上完后,回过来拓展阅读。基础情景思考假设有这样一张成绩表最左边的一列是名字,起名麻......
  • 大爽Python入门教程 2-6 拓展练习
    大爽Python入门公开课教案点击查看教程总目录方位输出第一章有一个思考题,方位变换:小明同学站在平原上,面朝北方,向左转51次之后(每次只转90度),小明面朝哪里?小明转过......