WPF mvvm框架Stylet使用教程-基础用法

news/2024/5/5 19:19:59/文章来源:https://blog.csdn.net/qq_39427511/article/details/130117299

Stylet框架基础用法

安装Nuget包

  1. 在“管理Nuget程序包”中搜索Stylet,查看Stylet包支持的net版本,然后选择第二个Stylet.Start包进行安装,该包会自动安装stylet并且生成基本的配置

注意事项:安装时要把需要安装的程序设为启动项目,或者尽量保存解决方案中只有一个wpf项目,否则Stylet.Start包生成的文件会跑到别的项目去

在这里插入图片描述
在这里插入图片描述

安装时自动调整项目内的文件

安装前:
在这里插入图片描述

安装后:
在这里插入图片描述

如果自动安装无法正常安装,也可以自己直接安装Stylet包,然后自己进行这些操作

安装之后的变化:

  1. 添加了Bootstrapper.cs文件

Bootstrapper(引导程序)

//Bootstrapper.cs代码
public class Bootstrapper : Bootstrapper<ShellViewModel>{protected override void ConfigureIoC(IStyletIoCBuilder builder){// Configure the IoC container in here}protected override void Configure(){// Perform any other configuration before the application starts}}
  1. 增加了Pages文件夹,里面的主要的外壳窗体ShellView和他的ViewModel
    在这里插入图片描述

  2. 在App.xaml中配置ApplicationLoader应用程序加载器和Bootstrapper引导程序

在这里插入图片描述

  1. 删除了MainWindow,主窗体就是ShellView

运行就可以看到默认界面效果

在这里插入图片描述

使用绑定

在Xaml中使用添加命名空间引用

xmlns:s="https://github.com/canton7/Stylet"

在ViewModel中使用需要继承基类Sceen,其他需要绑定Model可以继承验证基类ValidatingModelBase和属性推送基类PropertyChangedBase

他们三者继承关系:SceenValidatingModelBasePropertyChangedBase

属性绑定:

跟其他框架类似,只是改用了SetAndNotify方法,

 //xaml:<TextBlock Text="{Binding Title}" />//CS:
private string _title;
public string Title
{get{return _title;}set{SetAndNotify(ref _title, value);}
}//初始化
Title = "Stylet MVVM 框架学习";

效果:

在这里插入图片描述

命令绑定

命令绑定与其他框架略有不同,在Stylet中只要实现一个方法即可作为命令绑定,无需实现一个命令的属性

在ViewModel中实现一个方法:

 public void ChangeTitle()  //方法必须为Pulic,否则无法查找到
{Title = "使用Stylet Command改变标题";
}

添加一个Button,在Command属性中使用s:Action绑定ViewModel中的方法名,即可实现命令绑定

 <ButtonWidth="112"Height="30"Margin="0,360,0,0"HorizontalAlignment="Center"VerticalAlignment="Top"Command="{s:Action ChangeTitle}"Content="修改标题" />

效果:

点击之后修改了Title

在这里插入图片描述

ViewModel和View绑定

在Stylet中使用了ViewModel-first模式,不需要自己设置DataContext进行绑定,在框架中有第三个服务会负责为指定的ViewModel找到对应的View。

通过默认的命名规则进行约束,将名称中的“ViewModel”替换为“View”,例如:

“ShellViewModel”对应“ShellView”

“UserPageViewModel”对应“UserPageView”

在创建ViewModel和View时就需要按这个命名规则进行创建。

使用示例:

创建

创建一个UserPageView的用户控件(UserControl)如下

在这里插入图片描述

创建一个UserPageViewModel的ViewModel,简单代码如下:

public class UserPageViewModel : Screen
{public string Name { get; set; }public UserPageViewModel(){Name = "张三";}}

使用:

ShellViewModel中添加UserPageViewModel的属性字段,并在构造方法中初始化(如果不初始化,该属性为null,前端界面就不会显示这个view)

在这里插入图片描述

在ShellView中添加一个内容控件(ContentControl)作为占位控件使用,然后绑定他的s:View.Model为ViewModel中的UserPage,如下

 <ContentControlWidth="425"Height="277"Margin="10,19,0,0"HorizontalAlignment="Left"VerticalAlignment="Top"s:View.Model="{Binding UserPage}" />

效果:

可以看到在界面上显示了UserPageView控件内容

在这里插入图片描述

如果不初始化,则不显示

在这里插入图片描述

扩展-其他初始化方式:

通过Ioc容器注入

构造方法注入的方式,Stylet框架中实现了Ioc容器的功能,并且所有ViewModel都由控件自动生成,实现了注入功能,所以只要在构造函数中加入需要注入的参数即可

在这里插入图片描述

属性注入[Inject]也能达到同样效果

在这里插入图片描述

工程下载
示例源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_285714.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyCharm2021安装教程

PyCharm是一种Python IDE&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具&#xff0c;比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外&#xff0c;该IDE提供了一些高级功能&#xff0c;以用于支持Djang…

IntersectionObserver与无限滚动加载

学习链接 IntersectionObserver MDN Api IntersectionObserver API详解 Intersection observer 的概念和用法 过去&#xff0c;要检测一个元素是否可见或者两个元素是否相交并不容易&#xff0c;比如实现图片懒加载、内容无限滚动等功能时&#xff0c;都需要通过​getBound…

[Date structure]时间/空间复杂度

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;数据结构。数据结构专栏主要是在讲解原理的基础上拿Java实现&#xff0c;有时候有C/C代码。 ⭐如果觉得文章写的…

linux文件类型和根目录结构

目录 一、Linux文件类型 二、Linux系统的目录结构 1. FHS 2. 路径以及工作目录 &#xff08;1&#xff09;路径 &#xff08;2&#xff09;工作目录 一、Linux文件类型 使用ls -l命令查看到的第一个字符文件类型说明-普通文件类似于Windows的记事本d目录文件类似于Windo…

[NOIP2000 提高组] 进制转换

[NOIP2000 提高组] 进制转换 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置为指数,以 10为底数的幂之和的形式。例如 123 可表示为 10^22*10^13*10^0 这样的形式。 与之相似的&#xff0c;对二进制数来说&#xff0c;也可表示成…

WordPress添加阿里云OSS对象云储存配置教程

背景&#xff1a;随着页面文章增多&#xff0c;内置图片存储拖连网站响应速度&#xff0c;这里对我来说主要是想提升速度 目的&#xff1a;使用第三方云存储作为图片外存储(图床)&#xff0c;这样处理可以为服务器节省很多磁盘空间&#xff0c;在网站搬家的时候减少文件迁移的工…

2023TYUT移动应用软件开发程序设计和填空

目录 程序设计 程序设计1&#xff1a;根据要求设计UI,补充相应布局文件&#xff0c;即.xml文件 程序设计2&#xff1a;根据要求,补充Activity.java文件 程序填空 说明&#xff1a; 程序设计 程序设计1&#xff1a;根据要求设计UI,补充相应布局文件&#xff0c;即.xml文件…

安装Nginx——docker安装

使用docker安装Nginx 1.开启docker systemctl start docker docker search nginx[rootlocalhost ~]# systemctl start docker //开启docker [rootlocalhost ~]# docker search nginx //搜素镜像 2. docker pull nginxdocker imagesdocker run -…

【ROS】基于WIFI网络实现图像消息跨机实时传输

【开发背景】 研究机器人目标检测算法的时候&#xff0c;常常需要把推理图像实时展示出来&#xff0c;以供观摩。而ROS1提供的跨机通信方法&#xff0c;要么是配置单Master&#xff0c;要么是配置多Master&#xff1b;一方面配置麻烦&#xff0c;另一方面传输效率低下&#xf…

SQL select总结(基于选课系统)

表详情&#xff1a; 学生表&#xff1a; 学院表&#xff1a; 学生选课记录表&#xff1a; 课程表&#xff1a; 教师表&#xff1a; 查询&#xff1a; 1. 查全表 -- 01. 查询所有学生的所有信息 -- 方法一&#xff1a;会更复杂&#xff0c;进行了两次查询&#xff0c;第一…

基于灵动微SPIN系列开发的水泵方案介绍 以 MM32SPIN040C/MM32SPIN560C为主控

水泵是输送液体或使液体增压的机械。它将原动机的机械能或其他外部能量传送给液体&#xff0c;使液体能量增加&#xff0c;主要用来输送液体包括水、油、酸碱液、乳化液、悬乳液和液态金属等。 水泵以 MM32SPIN040C/MM32SPIN560C为主控。 水泵方案 MCU: MM32SPIN系列 1.输入…

【JavaWeb】后端(Maven+SpringBoot+HTTP+Tomcat)

目录一、Maven1.什么是Maven?2.Maven的作用?3.介绍4.安装5.IDEA集成Maven6.IDEA创建Maven项目7.IDEA导入Maven项目8.依赖配置9.依赖传递10.依赖范围11.生命周期二、SpringBoot1.Spring2.SpringBoot3.SpringBootWeb快速入门二、HTTP1.HTTP-概述2.HTTP-请求协议3.HTTP-响应协议…

机器学习实战:Python基于Logistic逻辑回归进行分类预测

目录1 前言1.1 Logistic回归的介绍1.2 Logistic回归的应用2 iris数据集数据处理2.1 导入函数2.2 导入数据2.3 简单数据查看3 可视化3.1 条形图/散点图3.2 箱线图3.3 三维散点图4 建模预测4.1 二分类预测4.2 多分类预测5 讨论1 前言 1.1 Logistic回归的介绍 逻辑回归&#xff…

产品知识沉淀

梁宁-产品思维30讲 看一个人或看一个产品&#xff0c;可以由表及里的五层来做观察和判断&#xff1a;感知层、角色层、资源层、能力圈和存在感 存在感之于人就好像生存之于动物一样&#xff0c;是触发情绪和推动行动的开关。 动物的状态和情绪&#xff0c;都是关乎它的生存需…

Stearic acid-mPEG,mPEG-STA,甲氧基PEG-单硬脂酸,具有优异疏水性

●外观以及性质&#xff1a; 硬脂酸是一种具有优异疏水性的18碳饱和脂肪酸脂质。PEG修饰的硬脂酸是一种具有亲水性和疏水性的优良的两亲性聚合物。聚乙二醇化脂质是一种优良的脂质体形成材料&#xff0c;可用于药物递送、基因转染和疫苗递送。硬脂酸是十八烷酸CH3&#xff08;C…

微信小程序开发 | API应用案例(下)

API应用案例&#xff08;下&#xff09;6.1【案例5】模拟时钟6.1.1 案例分析6.1.2 前导知识6.1.3 钟表页面布局6.1.4 钟表页面绘制6.2【案例6】罗盘动画6.2.1 案例分析6.2.2 前导知识6.2.3 设计罗盘页面布局6.2.4 手指触摸旋转罗盘6.2.5 单击按钮操作罗盘6.3【案例7】文件上传与…

关于药物|新药|药品市场调研报告(实操资料分享)

药品市场调研报告是指对药品行业进行详细的市场情况研究和分析。往往伴随着药品市场调研目的地不同&#xff0c;如战略探索、新药开发、投资决策等&#xff0c;报告编辑的内容要点要求也不一样。但总的核心要点内容笔者已提炼&#xff0c;如下&#xff1a; 一、药品市场调研报告…

Python学习笔记--判断语句

&#xff08;一&#xff09; 布尔类型和比较运算符 1. 布尔类型&#xff1a;判断结果 True&#xff1a;表示真&#xff08;是、肯定&#xff09; False&#xff1a;表示假&#xff08;否、否定&#xff09; """ 演示布尔类型的定义 以及比较运算符的应用 "…

【花雕学AI】找出合适的提示词—让ChatGPT发挥出最大的潜力与价值

ChatGPT 是一种基于人工智能技术的自然语言处理系统&#xff0c;它可以回答各种问题&#xff0c;提供有用的信息和建议。然而&#xff0c;要让 ChatGPT 发挥出最大的潜力和价值&#xff0c;我们需要使用一些提示词来帮助它更好地理解我们的问题和需求。这些提示词包括明确、详细…

文件上传漏洞 --- php邂逅windows通用上传缺陷

目录 后端源码 前端源码 后端代码审计 方式一绕过原理 --- 冒号加特性 验证及结果 方式二绕过原理 --- 数据流 验证及结果 环境需求 php5.2.17IIS环境&#xff0c;可以下载phpstuday2018来满足环境的要求。 后端源码 <?php //U-Mail demo ... if(isset($_POST[sub…