C# WPF入门学习主线篇(二十九)—— 绑定到对象和集合

C# WPF入门学习主线篇(二十九)—— 绑定到对象和集合

在这里插入图片描述

在WPF中,数据绑定是开发动态和交互性用户界面的核心技术。通过数据绑定,我们可以轻松地将UI控件与后台的数据源连接起来,实现数据的自动更新和显示。在本篇文章中,我们将介绍如何将WPF中的控件绑定到对象和集合。

一、数据绑定的基础概念

数据绑定是指将UI元素的属性与数据源的属性关联起来,当数据源的值发生变化时,UI元素的值会自动更新。反之,当UI元素的值发生变化时,数据源的值也会自动更新。

数据绑定的方向

  1. 单向绑定(One-Way Binding):数据源的变化会更新到UI控件,但UI控件的变化不会影响数据源。
  2. 双向绑定(Two-Way Binding):数据源和UI控件的变化会相互影响。
  3. 单向到源绑定(One-Way to Source Binding):UI控件的变化会更新到数据源,但数据源的变化不会影响UI控件。

二、绑定到对象

首先,我们来看看如何将WPF中的控件绑定到对象。

1. 定义数据对象

定义一个简单的Person类,其中包含两个属性:NameAge

public class Person
{public string Name { get; set; }public int Age { get; set; }
}

2. 在MainWindow中绑定对象

MainWindow类中,我们创建一个Person对象,并将其作为窗口的DataContext

using System.Windows;namespace WpfApp
{public partial class MainWindow : Window{public MainWindow(){InitializeComponent();this.DataContext = new Person { Name = "John Doe", Age = 30 };}}
}

3. 在XAML中绑定属性

在XAML中,我们通过Binding标记扩展来绑定TextBlock控件的Text属性到Person对象的属性。

<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="Object Binding Demo" Height="200" Width="300"><Grid><StackPanel><TextBlock Text="{Binding Name}" FontSize="16" Margin="10"/><TextBlock Text="{Binding Age}" FontSize="16" Margin="10"/></StackPanel></Grid>
</Window>

三、绑定到集合

接下来,我们来看看如何将WPF中的控件绑定到集合。

1. 定义ObservableCollection

我们使用ObservableCollection来定义一个包含多个Person对象的集合,并将其作为窗口的DataContext

using System.Collections.ObjectModel;
using System.Windows;namespace WpfApp
{public partial class MainWindow : Window{public ObservableCollection<Person> People { get; set; }public MainWindow(){InitializeComponent();People = new ObservableCollection<Person>{new Person { Name = "John Doe", Age = 30 },new Person { Name = "Jane Smith", Age = 25 },new Person { Name = "Sam Brown", Age = 20 }};this.DataContext = this;}}
}

2. 在XAML中绑定集合

在XAML中,我们将ListBox控件的ItemsSource属性绑定到People集合,并通过DisplayMemberPath属性指定显示Person对象的Name属性。

<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="Collection Binding Demo" Height="300" Width="400"><Grid><ListBox ItemsSource="{Binding People}" DisplayMemberPath="Name" /></Grid>
</Window>

四、动态更新集合

ObservableCollection的一个主要优势是能够动态更新并自动通知UI。因此,我们可以在运行时向集合中添加或删除项,并立即在UI中看到相应的变化。

1. 添加和删除项

MainWindow类中,添加两个按钮的点击事件处理程序,用于添加和删除Person对象。

private void AddPerson_Click(object sender, RoutedEventArgs e)
{People.Add(new Person { Name = "Michael Green", Age = 35 });
}private void RemovePerson_Click(object sender, RoutedEventArgs e)
{if (People.Any()){People.Remove(People.First());}
}

2. 修改XAML代码

在XAML中添加按钮,并绑定点击事件处理程序。

<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="Collection Binding Demo" Height="300" Width="400"><Grid><StackPanel><ListBox ItemsSource="{Binding People}" DisplayMemberPath="Name" /><Button Content="Add Person" Click="AddPerson_Click" Margin="5"/><Button Content="Remove Person" Click="RemovePerson_Click" Margin="5"/></StackPanel></Grid>
</Window>

五、总结

在本篇文章中,我们详细介绍了如何在WPF中将控件绑定到对象和集合。通过定义和初始化数据对象和集合,使用数据绑定将数据源与UI控件连接起来,并实现动态更新,我们可以轻松地创建一个响应式的用户界面。

数据绑定是WPF开发中的一个重要概念,通过掌握数据绑定的基础知识和使用方法,你可以更高效地开发出功能丰富、交互性强的WPF应用程序。在实际项目中,合理利用数据绑定和ObservableCollection,可以显著提高开发效率和代码的可维护性。

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

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

相关文章

深度学习跨平台环境问题

在深度学习过程中&#xff0c;不可避免的是在win上跑不通的代码在ubuntu中就可以跑通&#xff0c;这里建议使用autodl。 首先在ubuntu上导出环境&#xff08;如果你的环境是base的话使用base&#xff09; conda env export --name base --no-builds > environment.yaml 这…

wordpress 导航主题 有批量从源码导入功能

下载地址&#xff1a;wordpress导航主题 可以批量导入

ardupilot开发 --- Jetson Orin Nano 后篇

我拼命加速&#xff0c;但贫穷始终快我一步 0~1920. visp-d455&#xff1a;基于IBVS的Pixhawk无人机视觉伺服20.1 基础关于连接、通讯、UDP forward服务&#xff1a;一些相关的、有用的例程Linux C程序的gdb断点调试搭建仿真解决【testPixhawkDroneTakeoff.cpp例程能解锁但起飞…

物联网LORA技术-SX1276/SX1277/SX1278-137MHz至1020MHz低功耗远距离收发器

概述&#xff1a; SX1276/SX1277/SX1278 收发器主要采用LORATM 远程调制解调器&#xff0c;用于超长距离扩频通信&#xff0c;抗干扰性强&#xff0c;能够最大限度降低电流消耗。借助升特的LoRaTM 专利调制技术&#xff0c;SX1276/SX1277/SX1278 采用低成本的晶体和物料即可获得…

SHELL脚本学习(十)初识 sed编辑器

一、sed 编辑器 sed 编辑器被称作流编辑器&#xff0c;根据命令来处理数据流中的数据。 这些数据要么从命令行输入&#xff0c;要么保存在命令文本文件中。 sed编辑器可以执行下列操作&#xff1a; 从输入中读取一行数据根据所提供的命令匹配数据按照命令修改数据流中的数据将…

WIFI6E中的MESH组网功能

什么是WIFI6E和MESH组网&#xff1f; WIFI 6E 是扩展到6GHz 频段的WIFI 6无线通信技术&#xff0c;而“WIFI 6E”中的“6”是指WIFI技术的“第6代”&#xff0c;“E”则是指使用新频段的标准的最新扩展。WIFI 6E通过增加6GHz频段&#xff0c;提供更高的带宽、更低的延迟和更大…

VMware虚拟机下载安装Windows Server 2016

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…

从新手小白到红酒大咖:解锁红酒品鉴的终极秘籍,升级之路全攻略

在五彩斑斓的饮品世界中&#xff0c;红酒以其深邃的色泽、丰富的口感和悠久的历史&#xff0c;吸引了无数人的目光。对于红酒的初学者来说&#xff0c;从小白到品鉴师的道路或许充满了未知与挑战&#xff0c;但只要掌握了正确的知识和方法&#xff0c;就能够轻松踏入这个美妙的…

用群辉NAS打造影视墙(Jellyfin篇)

目录 1、安装Jellyfin媒体服务器 2、配置 (1)语言 (2)管理员账户 (3)添加媒体库 (4)指定元数据语言 (5)远程访问设置 (6)修改文件夹权限 (7)刷新电影 (8)启用硬件加速 3、PC浏览器访问 4、手机客户端 5、智能TV客户端 6、解决演员不能显示中文的问…

Android SurfaceFlinger——注册监听调用流程(七)

这一篇我们介绍一下 IComposer 中的另一个比较重要的方法&#xff0c;通过注册监听 Hal 层实现监听驱动的关键动作。 一、注册监听 在前面文章 SurfaceFlinger 的 init() 方法中&#xff0c;我们注册了一个 Callback 到 Hal 层中。最终通过 HIDL 调用到 Hal 层。 1、SurfaceF…

Java从小白到入职 视频教程 下载 因为太大存百度云盘4.zip

Java从小白到入职 视频教程 下载 1---战前准备_00-课程介绍&个人简介.mp4 2---战前准备_00-02-学习方法.mp4 3---战前准备_00-03-你的角色.mp4 4---战前准备_00-04-学习工具.mp4 5---战前准备_00-05-技术岗位概述-Web前端.mp4 6---战前准备_00-06-技术岗位概述-Java语…

Jenkins+gitee流水线部署springboot项目

目录 前言 一、软件版本/仓库 二、准备工作 2.1 安装jdk 11 2.2 安装maven3.9.7 2.3 安装docker 2.4 docker部署jenkins容器 三、jenkins入门使用 3.1 新手入门 3.2 jenkins设置环境变量JDK、MAVEN、全局变量 3.2.1 jenkins页面 3.2.2 jenkins容器内部终端 3.2.3 全…

购物返利系统中的数据处理与优化策略

购物返利系统中的数据处理与优化策略 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 随着电商行业的不断发展&#xff0c;购物返利系统作为一种常见的营销手段…

python-赏月

[题目描述] 在某个星球上看到的月亮大小有一个规律&#xff0c;月亮为每30天一个周期&#xff0c;在这30天的周期里&#xff0c;月亮的大小分别为 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1。 虽然天气很冷&#xff0c;但这个星球上的某个居民今…

MyBatis 源码分析--SqlSessionFactory

前言&#xff1a; 前文我们简单的回顾了 MyBatis 的基本概念&#xff0c;有聊到核心组件&#xff0c;工作流程等&#xff0c;本篇我们开始深入剖析 MyBatis 的核心源码&#xff0c;欢迎大家持续关注。 Mybatis 知识传送门 初识 MyBatis 【MyBatis 核心概念】 MyBatis 源码解…

钒能新材料综合回收利用,钒溶液净化富集工艺之离子交换法

钒电池储能产业作为典型的绿色低碳优势产业&#xff0c;是新型储能领域重要发展方向。钒电池储能具备大规模、长周期等优势&#xff0c;是储能领域的重要组成部分&#xff0c;将成为拓展电能利用、应对可再生能源随机波动、支撑可再生能源高占比电力系统的最佳技术途径之一。 …

力扣1019.链表中的下一个更大节点

力扣1019.链表中的下一个更大节点 从左到右 每个数确定下一个更大节点后 弹出栈中存下标 即res.size() class Solution {public:vector<int> nextLargerNodes(ListNode* head) {vector<int> res;stack<int> st;for(auto ihead;i;ii->next){while(!st.e…

openEuler 24.03 LTS - 华为欧拉开源版(华为 RHEL 兼容发行版)

openEuler 24.03 LTS - 华为欧拉开源版&#xff08;华为 RHEL 兼容发行版&#xff09; 华为红帽企业 Linux 兼容发行版 请访问原文链接&#xff1a;https://sysin.org/blog/openeuler/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sy…

Haproxy部署Web群集

HAProxy是一款开源的、高性能的TCP/HTTP负载均衡器和代理服务器&#xff0c;广泛应用于提高网站和应用的可用性和性能。本篇博客将介绍如何使用HAProxy部署一个高可用的Web集群。 目录 环境准备 安装HAProxy 配置HAProxy 配置解析 配置Web服务器 环境准备 假设我们有以下服…

【C++题解】1026 - 求商数和余数

问题&#xff1a;1026 - 求商数和余数 类型&#xff1a;基础问题 题目描述&#xff1a; 输入 a,b 两个整数&#xff0c;编程求出 a 除以 b 得到的商和余数。 输入&#xff1a; 输入一行&#xff0c;只有两个整数(中间有空格)。 输出&#xff1a; 输出只有一行&#xff0c…