WPF7-数据绑定基础

ops/2025/2/21 16:49:09/
  • 1. WPF数据绑定试验
    • 1.1. 数据绑定的核心实现
    • 1.2. {Binding}语法
    • 1.3. 理解 DataContext

1. WPF数据绑定试验

以下是一个简单的 WPF 数据绑定示例,使用两个TextBox控件分别表示Name和Age来进行进行数据绑定试验。

数据模型类

创建一个 Person 类,包含 NameAge 属性,并实现 INotifyPropertyChanged 接口以支持数据绑定。


namespace WpfApp1{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{private Person person;public MainWindow(){InitializeComponent();person = new Person { Name = "张三", Age = 25 };DataContext = person;}private void Button_Click_Update_Person(object sender, RoutedEventArgs e){// 更新 Person 对象的属性值person.Name = "李四";person.Age = 30;}private void Button_Click_Submit_Person(object sender, RoutedEventArgs e){ MessageBox.Show(string.Format("当前姓名为:{0},年龄为:{1}", person.Name, person.Age));}}public class Person : INotifyPropertyChanged{private string name;private int age;public string Name{get { return name; }set{name = value;OnPropertyChanged(nameof(Name));}}public int Age{get { return age; }set{age = value;OnPropertyChanged(nameof(Age));}}public event PropertyChangedEventHandler PropertyChanged;protected void OnPropertyChanged(string propertyName){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}}
}

XAML 界面

在 XAML 中创建一个简单的界面,包含一个 TextBox 用于输入名字,一个 TextBox 用于显示年龄。

两个button按钮,一个修改后台person对象,一个获取页面上输入的值。


<Window x:Class="WpfApp1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="WPF 数据绑定" Height="450" Width="800"><Grid Margin="10"><Grid.RowDefinitions><RowDefinition Height="Auto" /><RowDefinition Height="Auto" /><RowDefinition Height="Auto" /></Grid.RowDefinitions><!-- 名字输入框 --><Grid Grid.Row="0"><Grid.ColumnDefinitions><ColumnDefinition Width="Auto" /><ColumnDefinition Width="*" /></Grid.ColumnDefinitions><Label Content="名字:" Grid.Column="0" /><TextBox Grid.Column="1" Text="{Binding Name}" /></Grid><!-- 年龄显示 --><Grid Grid.Row="1" Margin="0,10,0,0"><Grid.ColumnDefinitions><ColumnDefinition Width="Auto" /><ColumnDefinition Width="*" /></Grid.ColumnDefinitions><Label Content="年龄:" Grid.Column="0" /><TextBox Grid.Column="1" Text="{Binding Age}" /></Grid><Grid Grid.Row="2" Margin="0,10,0,0"><Grid.ColumnDefinitions><ColumnDefinition Width="100" /><ColumnDefinition Width="100" /></Grid.ColumnDefinitions><Button Content="修改后台person" Click="Button_Click_Update_Person" Grid.Column="0"/><Button Content="提交界面person" Click="Button_Click_Submit_Person" Grid.Column="1"/></Grid></Grid>
</Window>

运行效果:

文章配图

运行程序后,你会看到初始界面中TextBox 中显示初始名字 “张三”,TextBox 中显示初始年龄 “25”。

当你在 TextBox 中修改名字时,Person 对象的 Name 属性会被自动更新,反之亦然。

这是因为 TextBox 和 Person 对象之间建立了双向数据绑定。

1.1. 数据绑定的核心实现

INotifyPropertyChanged 接口:Person 类实现了该接口,当属性值发生变化时,会通知绑定的控件更新。

1.2. {Binding}语法

在 XAML 中使用 {Binding Name}{Binding Age} 将控件绑定到 Person 对象的属性。

1.3. 理解 DataContext

DataContext:通过设置DataContext = person,将 Person 对象设置为窗口的数据上下文,使控件能够访问 Person 对象的属性。

在 WPF中,DataContext 是一个非常重要的概念,它用于定义数据绑定的上下文环境。

当你看到 DataContext = person; 这句代码时,它实际上是在为当前的 UI 元素(如窗口、控件等)设置数据绑定的源对象。

DataContext 是一个依赖属性,存在于 FrameworkElement 类中,因此所有继承自 FrameworkElement 的控件(如 Window、UserControl、TextBox、Button 等)都可以设置 DataContext。它的主要作用是为控件及其子控件提供一个默认的数据源,用于数据绑定。

通过这个简单示例,你可以快速掌握WPF数据绑定的基本原理和实现方法。


http://www.ppmy.cn/ops/160289.html

相关文章

Android嵌套滑动造成的滑动冲突原理分析

嵌套滑动造成的滑动冲突原理分析 场景复现&#xff1a; CoordinatorLayout AppBarLayout Vertical RecyclerView Horizontal RecycleView Horizontal RecycleView 是Vertical RecyclerView的一个子view, CoordinatorLayout 实现了AppBarLayout 和 RecyclerView的协调联动…

光子神经网络:为人工智能注入 “光” 速动力

光子神经网络&#xff08;Photonic Neural Networks, PNNs&#xff09;是利用光子学技术实现的人工神经网络&#xff0c;旨在通过光的高速传输和并行处理能力&#xff0c;突破传统电子计算在速度和能效上的限制。以下是光子神经网络的关键内容&#xff1a; 1. 光子神经网络的优…

VSCode 中使用 Snippets 设置常用代码块

背景 在开发中&#xff0c;有很多代码片段是重复的&#xff0c;例如&#xff1a;vue文件中的模版&#xff0c;react 中的模版&#xff0c;打印的 log 等等&#xff0c;很多很多。对于这些重复性的工作&#xff0c;vscode 官方提供了解决方案-Snippets in Visual Studio Code&a…

【Java】详细讲解数据类型与运算符

&#x1f3e0;大家好&#xff0c;我是Yui_&#x1f4ac; &#x1f351;如果文章知识点有错误的地方&#xff0c;请指正&#xff01;和大家一起学习&#xff0c;一起进步&#x1f440; &#x1f680;如有不懂&#xff0c;可以随时向我提问&#xff0c;我会全力讲解~ &#x1f52…

PHP+Apache+MySQL安装(Windows)

一、安装教程 参考链接1 参考链接2 二、问题描述 PHP安装目录下找不到php8apache2_4.dll PHP安装包下载错误 Apache Service Monitor: request operation has failed! 定位问题&#xff1a; 查看【事件查看器】 解决问题 安装或更新与PHP版本相对应的Visual C Redistribu…

分布式大语言模型服务引擎vLLM论文解读

论文地址&#xff1a;Efficient Memory Management for Large Language Model Serving with PagedAttention 摘要 大语言模型&#xff08;LLMs&#xff09;的高吞吐量服务需要一次对足够多的请求进行批处理。然而&#xff0c;现有系统面临困境&#xff0c;因为每个请求的键值…

Ubuntu安装PostgreSQL

安装 sudo apt update sudo apt install -y postgresql postgresql-client 启动服务 sudo systemctl start postgresqlsudo systemctl enable postgresql 配置文件目录 /etc/postgresql/{version}/main/ 配置新用户、新数据库 sudo -u postgres psql# 新建用户&#xf…

【蓝桥杯集训·每日一题2025】 AcWing 6122. 农夫约翰的奶酪块 python

Week 1 2月17日 农夫约翰的奶酪块 农夫约翰有一块立方体形状的奶酪&#xff0c;它位于三维坐标空间中&#xff0c;从 ( 0 , 0 , 0 ) (0,0,0) (0,0,0) 延伸至 ( N , N , N ) (N,N,N) (N,N,N)。 农夫约翰将对他的奶酪块执行一系列 Q Q Q 次更新操作。 对于每次更新操作&…