实现WPF中的数据更新 属性通知界面:INotifyPropertyChanged接口

在WPF (Windows Presentation Foundation) 应用程序中,当数据发生变化时,通常希望UI能够自动更新以反映这些变化。为了实现这一功能,WPF 提供了数据绑定机制,并且配合 INotifyPropertyChanged 接口使用,可以在数据模型属性发生变化时通知UI进行更新。

(文章后半部分有详细教程)

MainWindow.xaml.cs文件

using System.ComponentModel;
using System.Windows;namespace BindDataContextDemo
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window, INotifyPropertyChanged{public MainWindow(){this.DataContext = this;InitializeComponent();}private string data = "AAAAA";public string Data{get { return data; }set{data = value;OnPropertyChanged("Data");}}public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;protected void OnPropertyChanged(string propertyName){if (PropertyChanged != null){PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));}}private void Update_Click(object sender, RoutedEventArgs e){Data = "BBBB";}}
}

MainWindow.xaml

<Window x:Class="BindDataContextDemo.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="250" Width="300" ><StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"><TextBlock Text="用户名" FontSize="15"/><TextBox Text="{Binding Data,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Width="180" Height="30" FontSize="15" Margin="10"/><Button Content="Data数据更新" Width="180" Height="40" FontSize="15" Click="Update_Click"/></StackPanel>
</Window>

一、INotifyPropertyChanged 接口简介

INotifyPropertyChanged 接口是WPF数据绑定中的一个关键接口,它定义了一个名为 PropertyChanged 的事件。当实现此接口的对象的属性发生变化时,可以触发这个事件,通知绑定了该对象的UI元素进行更新。

二、实现 INotifyPropertyChanged 接口

public class MyViewModel : INotifyPropertyChanged  
{  private string _myProperty;  public string MyProperty  {  get { return _myProperty; }  set  {  if (_myProperty == value) return;  _myProperty = value;  OnPropertyChanged(nameof(MyProperty));  }  }  public event PropertyChangedEventHandler PropertyChanged;  protected virtual void OnPropertyChanged(string propertyName)  {  PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));  }  
}

 

三、在WPF中使用数据绑定

在WPF中,你可以使用数据绑定将UI元素与实现了 INotifyPropertyChanged 接口的对象进行连接。以下是如何在XAML中进行数据绑定的示例:

<Window x:Class="MyNamespace.MainWindow"  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  Title="MainWindow" Height="350" Width="525">  <Grid>  <TextBox Text="{Binding MyProperty, UpdateSourceTrigger=PropertyChanged}" />  </Grid>  
</Window>

四、设置 DataContext

为了使数据绑定生效,你还需要将你的ViewModel实例设置为Window或某个UI元素的DataContext。这通常在Window或UserControl的构造函数中完成:

public partial class MainWindow : Window  
{  private MyViewModel _viewModel;  public MainWindow()  {  InitializeComponent();  _viewModel = new MyViewModel();  this.DataContext = _viewModel;  }  
}

现在,当 MyViewModel 中的 MyProperty 属性发生变化时,绑定的 TextBox 将自动更新其显示内容。

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

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

相关文章

docker安装与重装

docker安装与重装 docker安装 https://blog.csdn.net/lyqhf153/article/details/79585976 参考上面的方式 cat /etc/issueuname -r uname -acat /proc/versiondf -hyum list docker-ce --showduplicates | sort -r 查看docker-ce的版本列表sudo yum install -y docker 没有…

Mesa3D图形库与NIR(New Intermediate Representation)

Mesa 是一个开源图形库&#xff0c;为 Unix 和 Linux 系统提供了 OpenGL 和 Vulkan API 的实现。它也支持其他图形 API&#xff0c;如OpenCL、OpenGL ES 和 Vulkan。Mesa 项目的目标是为开源社区提供高性能的图形库&#xff0c;使得开源操作系统能够充分利用现代图形硬件。 Me…

containerd的原理及应用详解(一)

本系列文章简介: 随着容器技术的迅猛发展,容器运行时成为了关注的焦点之一。而容器运行时的核心组件之一就是containerd。containerd是一个高度可扩展的容器运行时,它负责管理容器的生命周期、镜像管理以及资源隔离等核心功能。它是由Docker团队开发并开源的,目前已经成为了…

企业活动想联系媒体报道宣传如何联系媒体?

在企业的宣传推广工作中,我曾经历过一段费事费力、效率极低的时期。那时,每当公司有重要活动或新项目需要媒体报道时,我便要一家家地联系媒体,发送邮件、打电话,甚至亲自登门拜访,只为求得一篇报道。然而,这样的过程充满了不确定性和挑战,时常让我感到焦虑和压力山大。 记得有一…

C——单链表

一.前言 我们在前面已经了解了链表中的双向链表&#xff0c;而我们在介绍链表分类的时候就说过常用的链表只有两种——双向带头循环链表和单向不带头不循环链表。下来我来介绍另一种常用的链表——单向不带头不循环链表也叫做单链表。不清楚链表分类的以及不了解双向链表的可以…

【数据结构】第五讲:栈和队列

个人主页&#xff1a;深情秋刀鱼-CSDN博客 数据结构专栏&#xff1a;数据结构与算法 源码获取&#xff1a;数据结构: 上传我写的关于数据结构的代码 (gitee.com) 目录 一、栈 1.栈的定义 2.栈的实现 a.栈结构的定义 b.初始化 c.扩容 d.入栈 e.出栈 f.打印 g.取栈顶元素…

Java中常用类String的构造器与常用方法

Java中常用类String的构造器与常用方法 在Java编程中&#xff0c;String类是一个核心类&#xff0c;用于处理文本数据。掌握String类的构造器和常用方法对于编写涉及文本操作的程序至关重要。本文将为初学者介绍String类的一些常用构造器和常用方法&#xff0c;并通过示例代码…

Git 进行项目开发时新建一个分支作为备份

在使用 Git 进行项目开发时&#xff0c;想要在当前的 master 或其它分支基础上进行代码优化或修改时&#xff0c;并且在优化过程中保留一个当前状态的备份&#xff08;即新建一个分支作为备份&#xff09;&#xff0c;然后继续在 master 分支上开发&#xff0c;你可以按照以下步…

乐观锁、悲观锁、互斥锁、读写锁

乐观锁和悲观锁是两种不同的锁机制&#xff0c;用于在多线程环境下解决资源竞争问题。互斥锁和读写锁是两种常见的锁类型&#xff0c;它们都可以用来实现乐观锁或悲观锁。 乐观锁 是一种无锁机制&#xff0c;它假设在多线程环境下对共享资源的操作不会发生冲突&#xff0c;因…

【CTF Crypto】XCTF GFSJ0522 base64 Writeup(Base64编码)

base64 元宵节灯谜是一种古老的传统民间观灯猜谜的习俗。 因为谜语能启迪智慧又饶有兴趣&#xff0c;灯谜增添节日气氛&#xff0c;是一项很有趣的活动。 你也很喜欢这个游戏&#xff0c;这不&#xff0c;今年元宵节&#xff0c;心里有个黑客梦的你&#xff0c;约上你青梅竹马…

Git泄露(续)

接上一篇补充 git config --global user.name " " git config --global user.email 邮箱地址 配置用户名和邮箱 git commit 使其处于交互区&#xff0c;没有使用 -m&#xff0c;默认用vim 来编辑和提交信息 输入要提交的内容&#xff0c;然后按ESC建回到命令…

华纳云:美国服务器的几种防火墙类型介绍

美国服务器的防火墙主要是用于在系统的内外网之间构建一道相对隔绝的保护屏障&#xff0c;用来保障美国服务器的网络安全免受恶意流量的影响&#xff0c;与其他地区的服务器并无本质上的不同&#xff0c;通常可以使用以下几种类型的防火墙&#xff1a; 软件防火墙&#xff1a;软…

「 网络安全常用术语解读 」通用配置枚举CCE详解

1. 背景介绍 NIST提供了安全内容自动化协议&#xff08;Security Content Automation Protocol&#xff0c;SCAP&#xff09;为漏洞描述和评估提供一种通用语言。SCAP组件包括&#xff1a; 通用漏洞披露(Common Vulnerabilities and Exposures, CVE)&#xff1a;提供一个描述…

泰迪智能科技企业数据挖掘流程分析及特色服务优势

企业发展会沉淀大量的数据&#xff0c;数据中囊括了企业业务各种维度指标&#xff0c;通过数据挖掘和数据分析 &#xff0c;让企业业务了解过去、现在和未来将要发生什么&#xff0c;从而更好的调整企业发展方向。泰迪智能科技企业数据挖掘平台是面向企业级用户快速处理数据构建…

C++学习第二十八课:C++ 中的智能指针详解

在 C 中&#xff0c;内存管理是每个程序员都需要面对的问题。在处理动态分配的内存时&#xff0c;如果忘记释放内存&#xff0c;可能会导致内存泄漏。为了解决这个问题&#xff0c;C11 引入了智能指针的概念。本文将详细介绍 C 中使用智能指针的方法&#xff0c;并结合实际案例…

并查集刷题笔记

leetcode-1971:寻找图中是否存在路径 并查集可以解决的问题是&#xff1a;判断两个点是否在同一个集合之中 并查集模版&#xff1a; 最重要的两部&#xff1a;将两点连接以及对某一节点寻根。 一、初始化&#xff1a;{init()} 将每个节点的父节点初始化为自身。 二、寻根…

nvm安装踩雷 报错‘node‘ 不是内部或外部命令

需要排查以下内容&#xff1a; 1.nvm install node版本号后使用nvm use node版本号进行应用 2.在安装nvm前&#xff0c;确保电脑上不存在之前安装过的node的相关信息&#xff0c;包括环境变量、之前安装的nodejs、node_global文件夹&#xff08;存储全局安装的 Node.js 模块和…

永倍达 最新消息!发放消费券! 重新开网?

大家好 我是一家软件开发公司的产品经理 吴军 我又又又又又叕来蹭热度了&#xff0c;最近永倍达有新动作&#xff01;发放消费券&#xff1f; 店长群最新通知 4.15号开始发放消费券 一个月之后才可以重新提现 今天是5.10号离5.18也不远了 大家拭目以待看看到底能不能提现&a…

“紧急联系人功能”的智慧守护

在当今科技融入生活的每一个角落&#xff0c;一款名为“蝙蝠避障”专为盲人设计的辅助应用正悄然改变着视障群体的日常出行体验。这款应用中&#xff0c;一个看似不起眼却至关重要的功能——“紧急联系人功能”&#xff0c;以其强大的实用性和人文关怀&#xff0c;成为了盲人朋…

一套3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用、基于C#+VC + MSSQL开发的全套PACS源码

一套3D PACS系统源码&#xff1a;可实现医学影像获取、存档、观片、处理、打印多项应用 PACS的功能价值在于通过连接不同的影像设备&#xff0c;存储与管理图像&#xff0c;图像的调用与后处理&#xff0c;实现资源共享&#xff0c;降低成本&#xff0c;达到提高工作效率、提升…