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

WPF 界面命令绑定(MVVM结构)

1.创建模型数据类(M)

    /// <summary>/// 数据模型/// </summary>public class LoginDataModel{// 用户名private string _userName;public string UserName{get { return _userName; }set{_userName = value;}}// 密码private string _passWord;public string PassWord{get { return _passWord; }set{_passWord = value;               }}}

2.命令转发类实现接口(ICommand)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;namespace WPF_LoginUI
{/// <summary>/// 命令转发/// </summary>public class RelayCommand : ICommand{/// <summary>/// 命令是否能够执行/// </summary>private readonly Func<bool> _canExecute;/// <summary>/// 需要执行的方法/// </summary>private readonly Action _execute;/// <summary>/// 构造函数/// </summary>/// <param name="execute"></param>/// <param name="canExecute"></param>public RelayCommand(Action execute, Func<bool> canExecute){_canExecute = canExecute;_execute = execute;}/// <summary>/// 事件句柄/// </summary>public event EventHandler CanExecuteChanged{add{if(_canExecute != null){CommandManager.RequerySuggested += value;}}remove{if (_canExecute != null){CommandManager.RequerySuggested -= value;}}}// 实现接口 是否执行 public bool CanExecute(object parameter){if (_canExecute == null)return true;return _canExecute();}// 实现接口 执行命令public void Execute(object parameter){_execute();}}
}

3.创建视图模型类(VM)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;namespace WPF_LoginUI
{/// <summary>/// MVVM 架构的  VM(视图模型类)/// </summary>public class LoginViewModel : INotifyPropertyChanged{/// <summary>///  数据模型(存放数据)/// </summary>private LoginDataModel loginData;// 父窗体private MainWindow _mainWindow;public LoginViewModel(MainWindow mainWindow) {_mainWindow = mainWindow;loginData = new LoginDataModel();}// 属性变化时 通知界面 public event PropertyChangedEventHandler PropertyChanged;private void RaisePropertyChanged(string propertyName){PropertyChangedEventHandler handler = PropertyChanged;if (handler != null)handler(this, new PropertyChangedEventArgs(propertyName));}// 开放被绑定的数据// 被绑定的属性 用户名public string UserName{get { return loginData.UserName; }set{loginData.UserName = value;// 通知界面 属性发生变化RaisePropertyChanged("UserName");}}// 被绑定的属性 密码public string PassWord{get { return loginData.PassWord; }set{loginData.PassWord = value;// 通知界面 属性发生变化RaisePropertyChanged("PassWord");}}/// <summary>/// 事件-换成命令绑定方式/// </summary>// 登录函数private void LoginFunc(){if (UserName == "WPF" && PassWord == "123"){   // 弹出一个新的界面 ctrl+ k + d//MessageBox.Show("OK");IndexWindow indexWindow = new IndexWindow();indexWindow.Show();// 隐藏登录界面_mainWindow.Hide();}else{// 警告框MessageBox.Show("输入的用户名或密码不正确");UserName = "";PassWord = "";}}// 是否执行函数private bool CanLoginExecute(){return true;}// 界面绑定命令public ICommand LoginAction {get {return new RelayCommand(LoginFunc, CanLoginExecute);} }}
}

4.设置上下文关联

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;namespace WPF_LoginUI
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();// 为界面设置 绑定数据this.DataContext = new LoginViewModel(this); }}
}

5.界面绑定

<!-- 绑定对象的属性  UserName -->
<TextBox Text="{Binding UserName}" Grid.Row="0" Grid.Column="1" Margin="2"/>
<!-- 绑定对象的属性  PassWord -->
<TextBox Text="{Binding PassWord}" Grid.Row="1" Grid.Column="1" Margin="2"/><!-- 命令绑定 登录按钮 执行函数 LoginAction-->
<Button x:Name="BtnLogin" Grid.Row="3" Grid.Column="0" Content="登录" Grid.ColumnSpan="2" Command="{Binding LoginAction}"/>

相关文章:

WPF 界面命令绑定(MVVM结构)

1.创建模型数据类&#xff08;M&#xff09; /// <summary>/// 数据模型/// </summary>public class LoginDataModel{// 用户名private string _userName;public string UserName{get { return _userName; }set{_userName value;}}// 密码private string _passWor…...

常见手撕项目C++

常见手撕项目C 设计模式单例模式饿汉模式懒汉模式 策略模式策略接口实现具体的策略&#xff08;虚函数重写&#xff09;定义上下文用户调用 设计模式 单例模式 单例模式是一种常用的软件设计模式&#xff0c;其目的是确保一个类只有一个实例&#xff0c;并提供一个全局访问点来…...

创建一个批处理作业来处理大量数据,例如从数据库中读取数据并进行处理

创建一个批处理作业来处理大量数据&#xff0c;例如从数据库中读取数据并进行处理 要创建一个批处理作业来处理大量数据&#xff0c;您可以使用Spring Batch。Spring Batch是一个用于大规模批处理的框架&#xff0c;它提供了丰富的功能来处理复杂的批处理任务&#xff0c;如读…...

LeetCode 2.两数相加

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 …...

如何利用ChatGPT提升学术论文写作效率

ChatGPT无限次数:点击直达 如何利用ChatGPT提升学术论文写作效率 ChatGPT 是一种基于大规模预训练模型的自然语言处理工具&#xff0c;可以在各种文本生成任务中发挥作用&#xff0c;包括学术论文写作。利用ChatGPT&#xff0c;可以提高学术论文写作的速度和质量&#xff0c;帮…...

LLMs之Mistral:Mistral 7B v0.2的简介、安装和使用方法、案例应用之详细攻略

LLMs之Mistral&#xff1a;Mistral 7B v0.2的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;Mistral AI首个7B模型发布于2023年9月&#xff0c;在基准测试中超越Llama 2 13B&#xff0c;一下子声名大振。Mistral 7B v0.2对应的指令调优版本Mistral-7B-Instruct-v0…...

深入解析Oracle数据库中的WITH AS(CTE)原理

Oracle数据库中的WITH AS子句&#xff08;也称为公用表表达式CTE(Common Table Expression)&#xff09;是一种高级查询构造工具&#xff0c;它允许在一条SQL语句的开始部分定义临时的结果集&#xff08;或称子查询&#xff09;&#xff0c;这个结果集可以被随后的查询主体多次…...

Linux 环境安装 Elasticsearch 8.X

安装前说明 首先确定操作系统&#xff0c;在Linux发行版上执行uname -a查看具体系统。我是Ubuntu系统&#xff0c;可以用直接用apt-get安装&#xff0c;也可以下载tar.gz包手动安装。使用apt-get安装更方便快速&#xff0c;但不同的文件会被安装到不同的目录&#xff0c;不方便…...

Java零基础-集合:函数式接口

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…...

Redis Scan指令解析与使用示例

Redis Scan指令解析与使用示例 概念 想要从redis key列表中找到某个key&#xff0c;redis提供了一个简单粗暴的指令keys用来列出满足查询条件的所有key。 keys redis* keys redis*keykey指令非常简单&#xff0c;只要提供一个简单的正则表达式即可&#xff0c;但是有两个明显的…...

Qt+OpenGL入门教程(三)——绘制三角形

通过前两篇文章的学习&#xff0c;我想大家应该有了基本的理解&#xff0c;我们接下来实操一下。 创建Qt OpenGL窗口 QOpenGLWidget QGLWidget是传统QtOpenGL模块的一部分&#xff0c;与其他QGL类一样&#xff0c;应该在新的应用程序中避免使用。相反&#xff0c;从Qt5.4开始…...

springcloud基本使用(搭建eureka服务端)

创建springbootmaven项目 next next finish创建成功 删除项目下所有文件目录&#xff0c;只保留pox.xml文件 父项目中的依赖&#xff1a; springboot依赖&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-s…...

第十二章:预处理命令

文章目录 第十二章&#xff1a;预处理命令宏定义无参宏定义带参数的宏定义 文件包含处理 第十二章&#xff1a;预处理命令 作用&#xff1a;由编译预处理程序对程序中的特殊命令作出解释&#xff0c;以产生新的源程序对其进行正式编译 C语言与其他语言的重要区别就是可以使用预…...

Game Audio Programming

音频编程时游戏开发中最容易忽略&#xff0c;学习资源又是很少的环节。接下来&#xff0c;你将和我探索人耳的工作机制。 what is sound? 我们可以解释电视机是如何通过眼睛传递视觉信息的&#xff0c;但却往往无法对听觉信息做出类似的解释。 对声音的科学研究被称为声学&…...

高风险IP来自哪里:探讨IP地址来源及其风险性质

在网络安全领域&#xff0c;高风险IP地址是指那些可能涉及恶意活动或网络攻击的IP地址。了解这些高风险IP地址的来源可以帮助网络管理员更好地识别和应对潜在的安全威胁。本文将探讨高风险IP地址的来源及其风险性质&#xff0c;并提供一些有效的应对措施。 风险IP查询&#xf…...

【每日跟读】常用英语500句(300~400)

【每日跟读】常用英语500句 I had to take a shower. 我洗了个澡 Go on in. 赶紧进去吧 Hold up. 等一下 They seem like nice people. 他们看起来像好人 Such a wonderful age. 如此美好的年纪 That’s very impressive. 真厉害 I can see that. 看得出来 You should …...

设计模式(7):装饰器模式

一.装饰器模式职责&#xff1a; 动态的为一个对象增加新的功能&#xff1b;装饰器是一种用于代替继承的技术&#xff0c;无须通过继承增加子类就能扩展对象的新功能&#xff0c;使用对象的关联关系代替继承关系&#xff0c;更加灵活&#xff0c;同时避免类型体系的快速膨胀。 …...

Flink SQL填坑记3:两个kafka数据关联查询

在一个项目中,实时生成的统计数据需要关联另外一张表(并非维表),需要统计的数据表是Kafka数据,而需要关联的表,由于不是维度,不能按照主键查询,所以如果放在MySQL上,将存在严重的性能问题,这个时候我想到用将两张表的数据都生成为Kafka数据,然后进行Join操作。中途发…...

移动平台实时动态多点光源方案:Cluster Light

一、什么是 Cluster Light&#xff0c;它具体如何实现多点光源效果&#xff1f; 对于移动设备&#xff0c;如何支持场景中大量的实时点光源一直以来都是比较棘手的问题&#xff0c;因此对于过去&#xff0c;往往有如下两种常规方案&#xff1a; 静态点光源直接烘焙&#xff0…...

2024年03月CCF-GESP编程能力等级认证C++编程八级真题解析

本文收录于专栏《C++等级认证CCF-GESP真题解析》,专栏总目录:点这里。订阅后可阅读专栏内所有文章。 一、单选题(每题 2 分,共 30 分) 第 1 题 为丰富食堂菜谱,炒菜部进行头脑风暴。肉类有鸡肉、牛肉、羊肉、猪肉4种,切法有肉排、肉块、肉末3种,配菜有圆白菜、油菜、…...

(十一)图像的罗伯特梯度锐化

环境&#xff1a;Windows10专业版 IDEA2021.2.3 jdk11.0.1 OpenCV-460.jar 系列文章&#xff1a; &#xff08;一&#xff09;PythonGDAL实现BSQ&#xff0c;BIP&#xff0c;BIL格式的相互转换 &#xff08;二&#xff09;BSQ,BIL,BIP存储格式的相互转换算法 &#xff08;三…...

实验九 枚举问题(运算模拟)

实验名称&#xff1a;实验九 枚举问题&#xff08;运算模拟&#xff09; 实验目的&#xff1a;熟练掌握一些枚举问题的处理方法。 实验内容&#xff1a; 问题描述&#xff1a;&#xff08;乘积为n个1的数字游戏&#xff09;两位计算机爱好者在进行“积为n个1的数字游戏”&a…...

2024 年 AI 辅助研发趋势:从研发数字化到 AI + 开发工具 2.0,不止于 Copilot

1. 背景介绍 随着人工智能技术的飞速发展&#xff0c;AI在软件开发领域的应用越来越广泛。从最初的代码补全、错误提示&#xff0c;到现在的代码生成、自动化测试&#xff0c;AI正在逐步改变软件开发的模式。2024年&#xff0c;AI辅助研发的趋势已经从研发数字化向AI开发工具2…...

UE5数字孪生系列笔记(三)

C创建Pawn类玩家 创建一个GameMode蓝图用来加载我们自定义的游戏Mode新建一个Pawn的C&#xff0c;MyCharacter类作为玩家&#xff0c;新建一个相机组件与相机臂组件&#xff0c;box组件作为根组件 // Fill out your copyright notice in the Description page of Project Set…...

ASR-LLM-TTS 大模型对话实现案例;语音识别、大模型对话、声音生成

参考:https://blog.csdn.net/weixin_42357472/article/details/136305123(llm+tts) https://blog.csdn.net/weixin_42357472/article/details/136411769 (asr+vad) 这里LLM用的是chatglm;电脑声音播报用的playsound 1、实时语音识别版本 注意:暂时这项目有个缺陷就是tts…...

主干网络篇 | YOLOv8更换主干网络之EfficientNet

前言:Hello大家好,我是小哥谈。EfficientNet是一种高效的卷积神经网络架构,由Mingxing Tan和Quoc V. Le在2019年提出,其设计思想是在不增加计算复杂度的情况下提高模型的准确性。它引入了一个称为"复合系数"的概念,该系数用于同时缩放网络的深度、宽度和分辨率。…...

Web开发-Django学习笔记

客户端如何获取服务端的数据信息&#xff1f; 通常 是 HTTP网络协议&#xff0c;通过网络传输数据信息。 客户端通过HTTP协议发送请求信息给服务端&#xff0c;并从服务端接收响应信息。 Web 前端开发&#xff1a; &#xff08;HTML、CSS、JS&#xff09;文件部署在后端服务…...

关于深度学习的 PyTorch 项目如何上手分析?从什么地方切入?

文章目录 PyTorch 项目分析1.背景2.分析流程 PyTorch 项目分析 1.背景 当我们拿到一个 PyTorch 的深度学习项目时&#xff0c;应该怎么入手&#xff1f;怎么去查看代码&#xff1f; 2.分析流程 首先阅读对应项目的 README.md 文件。通过阅读 README.md &#xff0c;一般可以…...

JavaEE企业开发新技术4

2.16 模拟Spring IOC容器功能-1 2.17 模拟Spring IOC容器功能-2 什么是IOC&#xff1f; 控制反转&#xff0c;把对象创建和对象之间的调用过程交给Spring框架进行管理使用IOC的目的&#xff1a;为了耦合度降低 解释&#xff1a; 模仿 IOC容器的功能&#xff0c;我们利用 Map…...

CSS使用JS变量

1. CSS变量 CSS 变量&#xff08;也称为自定义属性&#xff09;允许我们在 CSS 中定义可重复使用的值&#xff0c;并将其应用于不同的选择器。为了创建一个 CSS 变量&#xff0c;我们需要使用 -- 前缀&#xff0c;然后可以像常规属性一样使用它。 :root {--primary-color: bl…...

有什么有什么好的学做饮品的网站/百度网盘网页版官网

一&#xff0c; 1&#xff0c;数据元素是数据的基本单位&#xff0c;一个数据元素由若干数据项组成 2&#xff0c;数据结构&#xff1a;相互之间有关系的数据元素集合 &#xff0c; 数据对象&#xff1a;相同性质的数据数据元素的集合 二&#xff0c; 1&#xff0c;逻辑结构…...

wordpress更换语言包/企业培训的目的和意义

‍‍‍‍NEW关注Tech逆向思维视频号最新视频→【网红饭店接连翻车 过期食品的危害有多大&#xff1f;】出品&#xff5c;智能车参考文&#xff5c;贾浩楠 褚万博比亚迪大利空&#xff1f;刚刚发布的半年报显示&#xff0c;这家市值8104.76亿的中国新能源汽车龙头&#xff0c;今…...

万网 做网站/百度投诉中心入口

Hadoop实现了一套Java 的FileSystem API,通过这套API&#xff0c;可以像操作本地文件一样&#xff0c;操作HDFS上面的文件和目录&#xff0c;并且可以和本地File进行交互&#xff0c;实现文件或目录的上传下载本例基于Hadoop 2.7.2Maven 加入Hadoop client 依赖org.apache.hado…...

wordpress 文章索引/无锡seo公司

这是一个允许您流式传输子流程输出的解决方案。事后使用相同的模板静态加载它(假设您的子进程将其自己的输出记录到文件中;如果没有&#xff0c;则将进程输出记录到日志文件中留给读者练习)from flask import Response, escapefrom yourapp import appfrom subprocess import P…...

网站界面设计说明/站牛网是做什么的

构建这里搜集了用来构建应用程序的工具。Apache Maven&#xff1a;Maven使用声明进行构建并进行依赖管理&#xff0c;偏向于使用约定而不是配置进行构建。Maven优于Apache Ant。后者采用了一种过程化的方式进行配置&#xff0c;所以维护起来相当困难。Gradle&#xff1a;Gradle…...

如何做pc网站适配/静态网页制作

文章目录一、清除浮动需求 ( 没有设置高度的盒子且内部设置了浮动 )二、清除浮动代码示例一、清除浮动需求 ( 没有设置高度的盒子且内部设置了浮动 ) 如果盒子没有设置高度 , 并且盒子中还设置了浮动 , 如上一篇博客 【CSS】课程网站 网格商品展示 模块制作 ② ( 网格商品展示盒…...