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

news2024/11/20 7:29:45

在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.coloradmin.cn/o/1663573.html

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

相关文章

VMware 不能拍摄快照

问题&#xff1a; 拍摄快照后&#xff0c;会出现这个弹窗&#xff0c;然后虚拟机就直接自动退出了&#xff0c;还会弹出一个框&#xff1a; 解决方法&#xff1a; 我用的是 window11 和 VMware16.0.0 这是因为VM16与window11&#xff0c;二者之间版本不兼容问题&#xff0c;可…

Hierarchical File Systems are Dead——论文泛读

HotOS 2009 Paper 分布式元数据论文阅读笔记整理 问题 文件系统一直采用分层名称空间&#xff0c;随着用户与越来越多的数据交互&#xff0c;并且对搜索能力的要求越来越高&#xff0c;这样一个简单的分层模型已经过时了。例如&#xff0c;查找照片时&#xff0c;用户描述他们…

设计模式 六大原则之单一职责原则

文章目录 概述代码例子小结 概述 先看下定义吧&#xff0c;如下&#xff1a; 单一职责原则的定义描述非常简单&#xff0c;也不难理解。一个类只负责完成一个职责或者功能。也就是说在类的设计中&#xff0c; 我们不要设计大而全的类,而是要设计粒度小、功能单一的类。 代码例…

OBS插件--音频采集

音频采集 音频采集是一款 源 插件,类似于OBS的win-capture/game-capture&#xff0c;允许从特定应用程序捕获音频&#xff0c;而不是捕获整个系统的音频。避免了因为特定音频的采集而需要引入第三方软件&#xff0c;而且时延也非常低。 下面截图演示下操作步骤&#xff1a; …

随身wifi网速测评!讯唐随身wifi和格行随身wifi哪个网速快?随身wifi哪个品牌最好用?

最近收到很多网友私信&#xff0c;希望推荐一款好用性价比高的随身wifi。通过各平台排行榜选出了公认口碑最好的格行随身wifi&#xff1b;又挑选了网友们经常问的的讯唐随身wifi&#xff1b;两个一起来实测一下&#xff0c;哪款更好用&#xff01; 【品牌评测】 格行随身wifi&…

施耐德和施耐德EOCR什么关系?

施耐德中国和施耐德韩国EOCR的关系主要体现在施耐德电气集团对韩国三和EOCR的收购和整合。 韩国三和EOCR株式会社是韩国主要的电动机保护器生产企业&#xff0c;由金仁锡博士&#xff08;施耐德电气集团韩国首席执行官&#xff09;于1981年建立。在2001年&#xff0c;为了把企…

机器学习-12-sklearn案例02-集成学习

总结 参考 菜菜的sklearn课堂——随机森林 算法使用过程 #导入数据集模块 from sklearn import datasets #分别加载iris和digits数据集 iris datasets.load_iris() #鸢尾花数据集 # print(dir(datasets)) # print(iris_dataset.keys()) # dict_keys([data, target, frame…

【网络基础】网络层 之 IP协议与分片、网段划分、IP地址分类、子网掩码与路由

文章目录 网络层1. IP协议段格式1.1 分片1.2 *为什么存在分片 / 分片是什么 ?*1.3 *如何理解 / 实现 分片与组装*1.4 深入具体&#xff1a;分片 和 组装 的过程1.5 为什么不推荐 分片 2. 网段划分2.1 举例&#xff1a;国际间通信 && 国家内通信2.2 理解网段划分 3. IP…

Swift 初学者趣谈:一招教你记住模式匹配 if case let 的语法,永不忘记

概览 相信初学 Swift 头发茂盛的小伙伴们都对 Swift 简洁且极富表现力的语法倾心不已。不过凡事皆有例外&#xff0c;模式匹配&#xff08;Pattern Matching&#xff09;的语法就是其中之一。 在本篇博文中&#xff0c;您将学到如下内容 概览1. 诡异的 if case let 语法&…

【半夜学习MySQL】数据库中的数据类型(含数值类型、文本二进制类型、时间类型、String类型详谈)

&#x1f3e0;关于专栏&#xff1a;半夜学习MySQL专栏用于记录MySQL数据相关内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 数据类型分类数值类型bit类型tinyint类型int类型float类型decimal类型 文本、二进制类型char类型varchar类型 时间类型Strin…

初识C语言——第十七天

选择语句&#xff1a;switch switch语句&#xff08;整型表达式&#xff09; { 语句项&#xff1a; } 而语句项是什么呢&#xff1f; //是一些case语句&#xff1a; //如下 case 整形常量表达式&#xff1b;常量可以&#xff0c;字符也可以&#xff08;因为字符存储的时…

Java并发编程:用户态、内核态和cache line

文章目录 一、介绍二、java中那些操作使用了内核态三、cache line的概念四、CPU缓存一致性协议 一、介绍 用户态和内核态是操作系统的两种运行状态&#xff0c;它们分别对应于不同的权限级别和访问能力。 用户态&#xff08;User Mode&#xff09;&#xff1a;这是应用程序运…

geotrust企业通配符证书2990

随着时代的变化&#xff0c;人们获取信息的方式由报纸、书籍变为手机、电脑&#xff0c;因此很多企事业单位用户开始在互联网中创建网站来进行宣传&#xff0c;吸引客户。为了维护网站安全环境&#xff0c;保护客户数据&#xff0c;企事业单位也开始使用SSL数字证书&#xff0c…

在做题中学习(55):一维前缀和模板

【模板】前缀和_牛客题霸_牛客网 (nowcoder.com) 题目解释&#xff1a; 注意&#xff1a;下标从1开始的。 l 和 r就是对这n个整数去取一个区间&#xff0c;例如示例一&#xff1a; (1,2) 区间 就是算出1 2 4 中 1&#xff0c;2下标对应值的和&#xff0c;12 3 同理,(2,3) …

煤矿防爆气象传感器

TH-WFB5随着工业技术的不断发展&#xff0c;煤矿作为我国能源领域的重要组成部分&#xff0c;其安全生产问题一直备受关注。在煤矿生产过程中&#xff0c;井下环境复杂多变&#xff0c;瓦斯、煤尘等易燃易爆物质的存在使得井下安全工作尤为重要。为了提高煤矿生产的安全性&…

综合能力 | 误差 | 学习笔记

误差指真值与观测值的差值。 误差分为系统误差&#xff08;消除方法&#xff1a;观测方法、仪器校正、修正等&#xff09;、偶然误差&#xff08;符合正态分布规律&#xff0c;进行计算纠正&#xff09;、粗差&#xff08;一般舍弃&#xff09;。 中误差&#xff08;均方差或标…

YOLO系列笔记(十四)——Compute Canada计算平台及其常见命令介绍

Compute Canada平台及其常见命令介绍 前言优势使用方法1. 检查模块不带版本号带版本号 2. 加载模块3. 检查模块是否加载成功4. 创建虚拟环境5. 编写作业脚本6. 提交作业7. 监控作业状态8. 查看作业开始预计时间9. 查看作业的详细输出10. 取消作业 注意结语 前言 大家好&#x…

十天学会单片机可能吗?单片机入门需要多久?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 十天学“会”单片机&#xf…

每周打靶VulnHub靶机-DEATHNOTE_ 1

Deathnote: 1 靶机传送门 don’t waste too much time thinking outside the box . It is a Straight forward box . 不要浪费太多时间跳出框框思考问题。这是一个很直接的盒子 是不是所有线索都在这个盒子里&#xff1f; 1.信息搜集 使用nmap进行域内存活主机扫描发现target …

Electron学习笔记(三)

文章目录 相关笔记笔记说明 五、界面1、获取 webContents 实例&#xff08;1&#xff09;通过窗口对象的 webContent 属性获取 webContent 实例&#xff1a;&#xff08;2&#xff09;获取当前激活窗口的 webContents 实例&#xff1a;&#xff08;3&#xff09;在渲染进程中获…