热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

WPF使用Microsoft.Toolkit.Mvvm作为Mvvm框架DryIoc作依赖注入

背景MVVMLight已多年未更新,Microsoft.Toolkit.Mvvm作为MVVMLight继任者,需要学习一下。Microsoft.Toolkit.Mvvm跟MVVML

背景

MVVMLight已多年未更新,Microsoft.Toolkit.Mvvm作为MVVMLight继任者,需要学习一下。
Microsoft.Toolkit.Mvvm跟MVVMLight使用非常相似,但是默认没有提供Ioc容器,我这里仿照MVVMLight使用DryIoc作为依赖注入记录下使用过程。

使用方式

引入Microsoft.Toolkit.Mvvm 和 DryIoc


	
	

添加ViewModel,View,Model文件夹

WPF使用Microsoft.Toolkit.Mvvm作为Mvvm框架DryIoc作依赖注入

ViewModelLocator类的代码

using DryIoc;

namespace MvvmToolkitDemo.ViewModel
{
    /// 
    /// 这个类包含对应用程序中所有视图模型的静态引用,并提供绑定的入口点。
    /// 
    public class ViewModelLocator
    {
        Container _container;

        /// 
        /// 构造函数
        /// 
        public ViewModelLocator()
        {
            //初始化容器
            _cOntainer= new Container();

            //注册到容器中
            _container.Register();
        }

        /// 
        /// MainViewModel视图模型的静态引用
        /// 
        public MainViewModel Main
        {
            get
            {
                //通过容器获取实例对象
                return _container.Resolve();
            }
        }

    }
}

App.xaml添加ViewModel定位器资源字典


    
        
            
        
    

MainViewModel.cs的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using Microsoft.Toolkit.Mvvm.ComponentModel;
using Microsoft.Toolkit.Mvvm.Input;

namespace MvvmToolkitDemo.ViewModel
{
    public class MainViewModel : ObservableObject
    {
        #region 属性字段
        private string? _userName;

        public string? UserName
        {
            get => _userName;
            set => SetProperty(ref _userName, value);
        }

        private int _age;

        public int Age
        {
            get => _age;

            set => SetProperty(ref _age, value);
        }
        #endregion

        /// 
        /// 按钮点击命令
        /// 
        public ICommand BtnClick { get; set; }

        public MainViewModel()
        {
            BtnClick = new RelayCommand((obj) => DoRun(obj));
        }

        private void DoRun(string? obj)
        {
            Task.Run(() =>
            {
                int i = 0;
                while (true)
                {
                    i++;
                    Task.Delay(1000).GetAwaiter().GetResult();
                    Age = i;
                }
            });
        }
    }
}

具体使用文档:https://docs.microsoft.com/en-us/windows/communitytoolkit/mvvm/introduction

View中使用

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

详细代码:


    
        
        

把项目保存为Dotnet模板

  1. 在项目根目录新建 .template.config 文件夹
  2. 文件夹里新建template.json 代码如下:
{
  "$schema": "http://json.schemastore.org/template",
  "author": "Monns",
  "classifications": ["Wpf"],
  "name": "Microsoft.Toolkit.Mvvm.App",
  "identity": "Microsoft.Toolkit.Mvvm.App",
  "shortName": "mtma",
  "tags": {
    "language": "C#",
    "type": "project"
  },
  "sourceName": "MvvmToolkitDemo", //这里是项目的名称,新建项目会替换掉
  "preferNameDirectory": true
}
  1. 安装模板
    dotnet new -i .\

  2. 新建项目
    dotnet new mtma -n 项目名称

也可以在vs中找到此项目模板,直接使用此模板新建即可

使用nuget安装

安装donet模板

dotnet new --install MicrosoftToolkitMvvm.Template

新建项目

dotnet new mtmt -n 项目名称

Gitee仓库

https://gitee.com/ie81/microsoft-toolkit-mvvm-template


推荐阅读
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
author-avatar
jiangping最棒_766
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有