当前位置: 首页 > news >正文

深入浅出(二)MVVM

MVVM

  • 1. 简介
  • 2. 示例

1. 简介

2. 示例

示例下载地址:https://download.csdn.net/download/qq_43572400/88925141

  1. 创建C# WPF应用(.NET Framework)工程,WpfApp1
    在这里插入图片描述
    在这里插入图片描述

  2. 添加程序集 GalaSoft.MvvmLight
    在这里插入图片描述
    在这里插入图片描述

  3. 创建ViewModel文件夹,并创建MainWindowViewModel.cs、ViewModelLocator.cs文件
    在这里插入图片描述

MainWindowViewModel.cs为视图模型类,用于管理应用程序的主要逻辑

public class MainWindowViewModel : ViewModelBase
{public MainWindowViewModel(){Title = "主界面";}private string _Title;public string Title{get { return _Title; }set { Set(ref _Title, value); }}
}

ViewModelLocator.cs用于提供 MainWindowViewModel 的实例

public class ViewModelLocator
{public ViewModelLocator(){ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);SimpleIoc.Default.Register<MainWindowViewModel>();}public MainWindowViewModel MainWindow{get{return ServiceLocator.Current.GetInstance<MainWindowViewModel>();}}
}
注意
① 定义的参数名必须与xml中path定义名一致
② return ServiceLocator.Current.GetInstance();指页面关闭后,页面参数保存在内存中,程序不关闭则参数一直存在
③ return New MainWindowViewModel(); 指每次打开一个新的页面
  1. 在App.xaml文件中,添加一个资源字典(ResourceDictionary)并定义一个名为"Locator"的静态资源:
<Application x:Class="WpfApp1.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfApp1"StartupUri="MainWindow.xaml"><Application.Resources><ResourceDictionary><local:ViewModelLocator x:Key="Locator"  xmlns:local="clr-namespace:WpfApp1.ViewModel"/></ResourceDictionary></Application.Resources>
</Application>

在这里插入图片描述

  1. 在XAML中设置"MainViewModel"作为主窗口的DataContext,使用资源字典(ResourceDictionary)和ViewModelLocator来实现这一点
    MainWindow.xaml
<Window x:Class="WpfApp1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfApp1"mc:Ignorable="d"Title="{Binding Title}" Height="450" Width="800"><Window.DataContext><Binding Path="MainWindow" Source="{StaticResource Locator}"></Binding></Window.DataContext><Grid></Grid>
</Window>

在这里插入图片描述
注意:Path定义的名称必须跟ViewModelLocator中声明的函数名一致,否则定义的*ViewModel.cs类不生效。

  1. 运行后MainWindowViewModel 设置的标题Title生效
    在这里插入图片描述
http://www.lryc.cn/news/313282.html

相关文章:

  • 2023年第三届中国高校大数据挑战赛(第二场)A题思路
  • 数据挖掘:
  • NDK,Jni
  • Java实战:Spring Boot整合Canal与RabbitMQ实时监听数据库变更并高效处理
  • 机器学习:探索计算机的自我进化之路
  • 【Flink网络数据传输(4)】RecordWriter(下)封装数据并发送到网络的过程
  • 【牛客】VL74 异步复位同步释放
  • CSS3笔记
  • 两天学会微服务网关Gateway-Gateway工作原理
  • 备忘 clang diagnostic 类的应用示例 ubuntu 22.04
  • Git小册-笔记迁移
  • 【你也能从零基础学会网站开发】Web建站之HTML+CSS入门篇 传统布局和Web标准布局的区别
  • 005-事件捕获、冒泡事件委托
  • SpringBoot快速入门(介绍,创建的3种方式,Web分析)
  • VMwareWorkstation17.0虚拟机搭建WindowsME虚拟机(完整安装步骤详细图文教程)
  • 【Java设计模式】八、装饰者模式
  • python INI文件操作与configparser内置库
  • 软考笔记--软件系统质量属性
  • 新型设备巡检方案-手机云巡检
  • node.js 下 mysql2 的 CURD 功能极简封装
  • Cloud-Eureka服务治理-Ribbon负载均衡
  • Northwestern University-844计算机科学与技术/软件工程-机试指南【考研复习】
  • 【Linux的网络编程】
  • vue-seamless-scroll 点击事件不生效
  • 前端工程部署步骤小记
  • TS常见问题
  • linux系统nginx常用命令
  • MySQl基础入门③
  • idea Gradle 控制台中文乱码
  • 嵌入式学习day31 网络