WPF控件:密码框绑定MVVM
以下是一种使用 MVVM 模式的方法:
- 首先,在 ViewModel 中添加一个属性来保存密码,我们可以使用 SecureString 类型。
// 密码变量
private SecureString _password; // 密码属性,用于获取和设置密码
public SecureString Password
{
get
{
return _password;
}
set
{
// 如果新值与旧值不同
if (_password != value)
{
// 更新密码
_password = value;
// 触发属性更改通知,通知UI层密码已更改
RaisePropertyChanged(nameof(Password));
}
}
}
- 创建一个附加属性来处理 PasswordBox 的密码变化,并将其绑定到 ViewModel 中的命令。
public ICommand PasswordChangedCommand => new DelegateCommand<object>(PasswordChanged); private void PasswordChanged(object parameter)
{
var passwordBox = parameter as PasswordBox;
if (passwordBox != null)
{
// 设置 ViewModel 中的密码属性
Password = passwordBox.SecurePassword;
}
}
- 在 XAML 中,使用行为触发器来触发命令。
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
<PasswordBox
x:Name="PasswordBox"
Height="45"
Margin="5"
FontSize="20"
FontWeight="Thin">
<i:Interaction.Triggers>
<i:EventTrigger EventName="PasswordChanged">
<i:InvokeCommandAction Command="{Binding PasswordChangedCommand}" CommandParameter="{Binding ElementName=PasswordBox}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</PasswordBox>
- 查看密码框的内容。
MessageBox.Show(SecureStringToString(Password));
/// <summary>
/// 将 SecureString 类型的数据转换为普通的字符串类型。
/// </summary>
/// <param name="secureString">要转换的 SecureString 对象。</param>
/// <returns>转换后的字符串,如果转换失败则返回空字符串。</returns>
private string SecureStringToString(SecureString secureString)
{
// 初始化指针
IntPtr ptr = IntPtr.Zero;
try
{
// 将 SecureString 转换为指针
ptr = Marshal.SecureStringToGlobalAllocUnicode(secureString); if (ptr != IntPtr.Zero)
{
// 将指针中的数据复制到一个普通的字符串
return Marshal.PtrToStringUni(ptr);
}
else
{
return string.Empty;
}
}
catch (Exception ex)
{
// 处理异常
Console.WriteLine($"转换 SecureString 出错:{ex.Message}");
return string.Empty;
}
finally
{
// 清除内存中的敏感数据
if (ptr != IntPtr.Zero)
{
Marshal.ZeroFreeGlobalAllocUnicode(ptr);
}
}
}
WPF控件:密码框绑定MVVM的更多相关文章
- WPF——控件之间的绑定
一.启动窗口 二.控件绑定(注意看光标的位置,一个是单向绑定,一个是双向绑定) 注意看单向绑定与双向绑定的绑定方法:
- WPF 控件之ComboBox绑定[2]
最近感觉新的方法Binding comboBox用起来很好用. 记录一下: <ComboBox Grid.Row=" x:Name="cboFamilyName" ...
- WPF DataGrid列设置为TextBox控件的相关绑定
在wpf的DataGrid控件中,某一列的数据模板为TextBox控件的话,绑定Text="{Binding TxtSn, UpdateSourceTrigger=PropertyChang ...
- WPF编程:textbox控件文本框数据显示最后一行
WPF编程:textbox控件文本框数据显示最后一行 TextBox控件在接收大量数据的时候,滚动条一般在最上方,如何使滚动条随着数据的接收而向下滚动呢?比如有一个TextBox'控件txbRecvD ...
- 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程
反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) 背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...
- 6 WPF控件
WPF控件分类: 内容控件 标题内容控件 文本控件 列表控件 基于范围的控件 日期控件 控件类 控件是与用户交互的元素.控件可以获得焦点,能接受键盘或鼠标的输入. 所有控件的基类是System.Win ...
- Sparrow.Chart.Wpf控件的动态调用
最近需要在Wpf程序中显示曲线,感觉Sparrow.Chart.Wpf控件不错(http://sparrowtoolkit.codeplex.com/),完全开源的一个控件支持,可以通过nuget下载 ...
- 【WPF】创建基于模板的WPF控件(经典)
原文:[WPF]创建基于模板的WPF控件(经典) WPF可以创建两种控件,它们的名字也很容易让人混淆:用户控件(User Control)和定制控件(Customer Control),之所以如此命名 ...
- 国内开源C# WPF控件库Panuon.UI.Silver推荐
国内优秀的WPF开源控件库,Panuon.UI的优化版本.一个漂亮的.使用样式与附加属性的WPF UI控件库,值得向大家推荐使用与学习. 今天站长(Dotnet9,站长网址:https://dotne ...
- 国内开源C# WPF控件库Panuon.UI.Silver强力推荐
国内优秀的WPF开源控件库,Panuon.UI的优化版本.一个漂亮的.使用样式与附加属性的WPF UI控件库,值得向大家推荐使用与学习. 今天站长(Dotnet9,站长网址:https://dotne ...
随机推荐
- 深入分析Java中的PriorityQueue底层实现与源码
本文分享自华为云社区<滚雪球学Java(70):深入理解Java中的PriorityQueue底层实现与源码分析>,作者: bug菌. 环境说明:Windows 10 + IntelliJ ...
- 记录--JS原型链
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 引子 对于初学者学习原型链,还是有很大的困难.一方面是函数与对象分不太清楚:另一方面,不懂原型链的继承等.本人曾今也深受困惑,并且把疑惑的 ...
- 二次元 & 动漫壁纸网站(内容记录)
前言 天天和电脑.手机以及平板等电子设备打交道,一个好看的桌面壁纸图片当然是必不可少的,也曾经分享过<值得珍藏的高清壁纸网站推荐>,各种类型和分辨率的壁纸都有. 今天再分享些「高清二次元& ...
- 记录--关于无感刷新Token,我是这样子做的
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 什么是JWT JWT是全称是JSON WEB TOKEN,是一个开放标准,用于将各方数据信息作为JSON格式进行对象传递,可以对数据进行可 ...
- MindSponge分子动力学模拟——自建力场(2024.03)
技术背景 在MindSponge教程合集中我们已经介绍了很多使用MindSponge进行分子动力学模拟的方法,这里主要介绍在MindSponge中自定义一个力场.在传统的MD软件中,如果你希望去开发一 ...
- C#无需第三方插件实现json和table互转
using System; using System.Collections.Generic; using System.Collections; using System.Linq; using S ...
- 使用 OpenCV 进行文档矫正
使用 OpenCV 进行文档矫正 本文只发布于博客园与pchar博客 std::vector<std::vector<cv::Point>> cvhelper::findCor ...
- openGauss3.1.0 版本的gs_stack功能解密
openGauss3.1.0 版本的 gs_stack 功能解密 不管是测试还是研发,工作中总有遇到各种各样的问题.比如,你有没有遇到过在数据库中执行某个 SQL,却一直不返回结果,这时候的你是不是非 ...
- 【原创】win11完美搭建macos13实现IOS自动化测试环境
虚拟机完美搭建IOS自动化测试环境 一.win系统 1.1 安装虚拟机VM16 如果是macos系统请跳过 详细安装请看压缩包,私信可以提供安装包 1.2 VM解锁macOS 使用的是unlocker ...
- 重学c#系列——什么是性能[外篇性能篇一]
前言 简单写一下性能的简介. 正文 什么是性能,很多时候有一个问题,那就很多人喜欢说.这个服务有很多访问,我们需要这样设计. 这是一个无法验证的指标,访问次数是多少? 响应时间是多少. 我把这归纳为自 ...