实现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.hqwc.cn/news/688003.html

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

相关文章

【北京迅为】《iTOP-3588从零搭建ubuntu环境手册》-第3章 Ubuntu20.04系统设置

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

RFID工业读写器在危化品储存管理的优势有哪些?

在化学品和危险品储存管理领域&#xff0c;传统的管理方式通常存在一些痛点和挑战&#xff1a;化学品和危险品的管理主要依赖于人工记录和监控&#xff0c;容易出现数据不准确、遗漏、混淆等问题&#xff0c;导致安全隐患和管理困难。化学品和危险品的存储和管理涉及到一系列安…

XTuner笔记

为什么要微调&#xff1a; 1. 模型不具备一些私人定制的知识 2。模型回答问题的套路你不满意。 对应衍生出来两种概念 增量预训练微调&#xff1a; 使用场景&#xff1a;让基座模型学习到一些新知识&#xff0c;如某个垂类领域的常识训练数据&#xff1a;文章、书籍、代码等…

护眼台灯和普通台灯差别很大吗?专业护眼灯品牌有哪些?

随着科技的不断演进&#xff0c;台灯的设计也日益脱胎换骨&#xff0c;从曾经的笨重造型转变为如今轻盈雅致的外观。它们的功能同样经历了多样化的革新&#xff0c;变得更加人性化和便捷。作为学习、阅读和办公环境中不可或缺的照明工具&#xff0c;台灯所提供的光线舒适度至关…

寻找最大价值的矿堆 - 矩阵

系列文章目录 文章目录 系列文章目录前言一、题目描述二、输入描述三、输出描述四、Java代码五、测试用例 前言 本人最近再练习算法&#xff0c;所以会发布一些解题思路&#xff0c;希望大家多指教 一、题目描述 给你一个由’0’(空地)、‘1’(银矿)、‘2’(金矿)组成的地图…

blender 制作圆角立方体模型,倒角实现。cocos 使用。导出fbx

图片&#xff1a; 步骤&#xff1a; 1.首先创建一个立方体&#xff0c;这里可以使用默认的立方体。 2.在属性面板选择如“扳手”图标一样的修改器工具。 3.设置数量和段数实现圆角的圆滑效果&#xff0c;没有菱角。 保存导出相关的教程&#xff1a;

2024HW Linux应急响应基础学习

首先展示关于Linux的关键目录&#xff0c;这是应急响应查看的关键&#xff1a; 常用命令 top //查看进程资源的占用情况 ps -aux //查看进程 直接写ps aux也可以 netstat -antpl //查看网络连接 ls -alh /proc/pid //查看某个pid对应的可执行程序 pid记得修改 lsof /…

吴恩达2022机器学习专项课程C2(高级学习算法)W1(神经网络):Lab01 神经元和层

目录 导入Tensorflow的库无激活函数 vs 有激活函数&#xff1f;1.无激活函数2.有激活函数 无激活函数的神经元-回归/线性模型1.创建训练集散点图2.创建层3.层输入4.获取层参数5.层参数的形状6.手动设置层的参数7.层计算vs线性回归模型计算 有激活函数sigmoid的神经元1.创建训练…

【FX110】台湾修改洗钱法已加强对虚拟资产的监管

台湾正在通过修订《洗钱控制法》加强其反洗钱法规&#xff0c;使其法律与亚太反洗钱组织 (APG) 制定的国际标准保持一致。 此次修正案的重点是将虚拟资产和虚拟资产服务提供商置于台湾反洗钱制度的严格监管之下。修订后的法律对“虚拟资产”和“虚拟资产服务提供商”增加了明确…

CH340 RTS DTR引脚编程驱动OLED

我们常用的四线OLED就是IIC通信的&#xff0c;那么我们能不能用ch340来模拟一个IIC呢&#xff0c;当然可以我移植了中景园的OLED驱动&#xff0c;接下来就是见证奇迹的时刻&#xff0c;成功点亮&#xff0c;受限于CH340的引脚速度&#xff0c;模拟IIC的通信速度只有3k左右 注意…

centos7.9系统rabbitmq3.8.5升级为3.8.35版本

说明 本文仅适用rabbitmq为RPM安装方式。 升级准备 查看环境当前版本&#xff1a; # cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) # rabbitmqctl status Status of node rabbitmq01 ... RuntimeOS PID: 19333 OS: Linux Uptime (seconds): 58 Is under …

React 第三十一章 虚拟DOM

面试题&#xff1a;什么是虚拟DOM&#xff1f;其优点有哪些&#xff1f; 标准且浅显的答案 虚拟dom本质上就是一个普通的 JS 对象&#xff0c;用于描述视图的界面结构 虚拟 DOM 最早是由 React 团队提出来的&#xff0c;因此 React 团队在对虚拟 DOM 的定义上面有绝对的话语权。…