C# WPF入门学习主线篇(二十六)—— 绑定路径和数据上下文

C# WPF入门学习主线篇(二十六)—— 绑定路径和数据上下文

在这里插入图片描述

在WPF(Windows Presentation Foundation)中,数据绑定是一个核心概念,它允许你将UI控件的属性与数据源属性进行绑定,从而实现数据和UI的自动同步。在这篇博客中,我们将深入探讨绑定路径(Binding Path)和数据上下文(DataContext),并通过详细的代码示例帮助你理解和应用这些概念。

绑定路径(Binding Path)

绑定路径是用于指定数据源中要绑定的属性的路径。绑定路径可以是简单属性、嵌套属性或集合属性。

简单属性绑定

简单属性绑定是指将控件的属性绑定到数据源的一个简单属性。例如,将TextBlock控件的Text属性绑定到Person对象的Name属性。

示例

假设我们有一个Person类:

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

在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="Binding Path Demo" Height="200" Width="300"><Window.DataContext><local:Person Name="John Doe" Age="30"/></Window.DataContext><Grid><StackPanel><TextBlock Text="{Binding Name}" FontSize="16" Margin="10"/><TextBlock Text="{Binding Age}" FontSize="16" Margin="10"/></StackPanel></Grid>
</Window>

在这个示例中,TextBlock控件的Text属性分别绑定到了Person对象的NameAge属性。

嵌套属性绑定

嵌套属性绑定是指将控件的属性绑定到数据源的嵌套属性。例如,将TextBlock控件的Text属性绑定到Person对象的Address.City属性。

示例

假设我们有一个Address类和一个包含AddressPerson类:

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

在XAML中,我们可以这样绑定:

<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfApp"Title="Binding Path Demo" Height="200" Width="300"><Window.DataContext><local:Person Name="John Doe" Age="30"/></Window.DataContext><Grid><StackPanel><TextBlock Text="{Binding Name}" FontSize="16" Margin="10"/><TextBlock Text="{Binding Age}" FontSize="16" Margin="10"/></StackPanel></Grid>
</Window>

在这个示例中,TextBlock控件的Text属性分别绑定到了Person对象的Name属性、Address.City属性和Address.Street属性。

数据上下文(DataContext)

数据上下文(DataContext)是WPF数据绑定的核心,它决定了绑定源的范围。可以将数据上下文设置为一个数据对象,这样该对象的属性就可以在绑定路径中直接引用。

设置数据上下文

可以在多个级别上设置数据上下文:窗口级别、面板级别和控件级别。通常,我们在窗口或面板级别设置数据上下文,以便在多个控件之间共享。

示例

假设我们有一个Person对象:

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

在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="DataContext 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>

在这个示例中,我们在MainWindow的构造函数中设置了DataContext,将其绑定到一个Person对象。这样,所有子控件都可以访问Person对象的属性。

绑定到不同的数据上下文

在某些情况下,我们可能需要在同一个窗口中绑定到不同的数据上下文。可以在面板或控件级别设置数据上下文来实现这一点。

示例

假设我们有两个Person对象:

using System.ComponentModel;
using System.Windows;namespace WpfApp
{public partial class MainWindow : Window{public MainWindow(){InitializeComponent();this.DataContext = new Person { Name = "John Doe", Age = 30 };}public Person AnotherPerson { get; } = new Person { Name = "Jane Doe", Age = 25 };}public class Person{public string Name { get; set; }public int Age { get; set; }}
}

在XAML中,我们可以这样使用:

<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfApp"Title="Multiple DataContext Demo" Height="200" Width="300"><Grid><StackPanel><TextBlock Text="{Binding Name}" FontSize="16" Margin="10"/><TextBlock Text="{Binding Age}" FontSize="16" Margin="10"/><StackPanel DataContext="{Binding AnotherPerson, RelativeSource={RelativeSource AncestorType=Window}}"><TextBlock Text="{Binding Name}" FontSize="16" Margin="10"/><TextBlock Text="{Binding Age}" FontSize="16" Margin="10"/></StackPanel></StackPanel></Grid>
</Window>

在这里插入图片描述

在这个示例中,外层StackPanel继承自窗口的DataContext(第一个Person对象),而内层StackPanel绑定到另一个Person对象(AnotherPerson属性)。这样,我们可以在同一个窗口中绑定到不同的数据上下文。

结论

通过理解和应用绑定路径和数据上下文,可以更灵活地在WPF中进行数据绑定,从而实现数据和UI的自动同步。希望通过这篇博客的介绍,你对绑定路径和数据上下文有了更深入的了解,并能够在实际开发中应用这些概念来构建更加高效和灵活的WPF应用程序。

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

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

相关文章

05-腾讯云Copilot及 向量数据库AI套件介绍

1 Andon Copilot核心功能介绍 2 Andon Copilot覆盖腾讯云售后、售前场景 3 腾讯云向量数据库– AI套件效果 AI 套件是腾讯云向量数据库&#xff08;Tencent Cloud VectorDB&#xff09;提供的一站式文档检索解决方案&#xff0c;包含自动化文档解析、信息补充、向量化、内容检…

HTTPS请求阶段图解分析

HTTPS请求阶段分析 请求阶段分析 请求阶段分析 一个完整、无任何缓存、未复用连接的 HTTPS 请求需要经过以下几个阶段&#xff1a; DNS 域名解析、TCP 握手、SSL 握手、服务器处理、内容传输。 一个 HTTPS 请求共需要 5 个 RTT 1 RTT&#xff08;域名解析&#xff09; 1 RTT…

工业4.0下的PLC进化论:ARMxy计算机如何重塑自动化

智能物流系统的高效与精准成为企业竞争力的关键。在这个背景下&#xff0c;传统的PLC系统因其固有的局限性&#xff0c;如扩展性差、系统封闭等&#xff0c;开始显得力不从心。ARMxy工业计算机作为新一代的PLC替代方案&#xff0c;凭借其低功耗、高性能以及高度的灵活性&#x…

H5单点登录分析介绍(登录状态检验状态透传分析)

文章目录 1、单点登录解决方案1.1、后端保存登录状态1.2、token模式 2、user服务-登录接口2.1、UserController2.2、UserInfoServiceImpl2.3、载荷2.4、响应2.5、Redis Desktop Manager 3、user服务-登录成功获取用户信息回显3.1、UserController3.2、UserInfoServiceImpl3.3、…

Unity资源 之 最受欢迎的三消游戏开发包 - Bubble Shooter Kit 【免费领取】

三消游戏开发包 - Bubble Shooter Kit 免费领取 前言资源包内容领取兑换码 前言 如果你是一名 Unity 游戏开发者&#xff0c;并且正在寻找一种快速、简单的方式来创建自己的三消游戏&#xff0c;那么 Bubble Shooter Kit 就是你所需要的。 资源包内容 Bubble Shooter Kit 是…

英文语法工具Grammarly for Word下载和安装

前言&#xff1a;论文写作语法检查和润色的时候&#xff0c;可以用Grammarly进行帮助。 Grammarly for Word的下载、安装、使用 官网下载Grammarly for Microsoft Office安装GrammarlyWord使用GrammarlyGrammarly使用 官网下载Grammarly for Microsoft Office 地址&#xff1…

【全开源】ChatGPT 机器人公众号小程序h5源码开源交付支持二开

AI机器人系统对接OPENAI&#xff1a;智能互联的无限可能 &#x1f310; 一、引言&#xff1a;AI机器人系统与OPENAI的碰撞 在科技日新月异的今天&#xff0c;AI机器人系统正逐渐渗透到我们生活的各个角落。而当这一智能系统与全球领先的OPENAI技术相结合&#xff0c;又将擦出…

【CT】LeetCode手撕—33. 搜索旋转排序数组

目录 题目1-思路1-1 模式识别&#xff1a;1-2 二分模板 && 本质二分红色边界二分绿色边界 1-3 本题思路①二分出第一个区间②判断 target 在哪个区间③利用二分性质 2- 实现⭐33. 搜索旋转排序数组——题解思路 3- ACM实现 题目 原题连接&#xff1a;33. 搜索旋转排序…

MathTpye7最新版软件下载与安装步骤2024最新新手小白教程

在2024年&#xff0c;作为软件开发者的你&#xff0c;一定知道MathType这款广受欢迎的数学公式编辑器吧&#xff01;&#x1f4f1;&#x1f50b;&#x1f4b0;&#x1f9ee; MathType是一款功能强大的数学公式编辑工具。无论是学术研究&#x1f4da;还是数字教育&#x1f469;‍…

火车头采集怎么使用GPT等AI原创文章

火车头采集官方并没有GPT、百度文心一言AI、阿里通义千问AI、Kimi大模型等AI功能&#xff0c;但支持接入插件&#xff0c;可以编写相应人工智能AI原创文章插件&#xff08;火车头采集支持PHP和c#这2种语言的插件编写&#xff09;&#xff0c;或者导入第三方封装好的GPT等AI原创…

【收藏】Web 前端知识体系精简【文末福利!】赠2024Web 前端/安全工程师资料视频教程+源码+课件

目录 JAVASCRIPT 篇 0、基础语法 1、函数原型链 2、函数作用域 3、函数指针 this 4、构造函数 new 5、闭包 6、单线程和异步队列 7、异步通讯 Ajax技术 8、DOM对象 document 9、事件系统 Event 10、全局对象 window CSS 篇 1、选择器 2、定位 3、浮动 4、盒子…

人脸识别系统---人脸对比

一、人脸对比 1.定义全局变量来存储选择的图片路径和标签 save_image1 None save_image2 None image_label1 None image_label2 None2.定义了一个名为compare_faces的函数&#xff0c;用于比较两张图片中的人脸是否相似 def compare_faces():if save_image1 and save_im…

远程开发端口转发

应用推荐场景&#xff1a; 1.服务器跑后台&#xff0c;本地出前端应用。 比如Stable Diffusion的大模型打标应用。 2.Docker容器服务器。 对于本地服务想要转出去&#xff0c;跑出来前端。该项能克服虚拟机的端口与ip访问问题。 正文&#xff1a; 涉及的软件&#xff1a; …

二级造价师精选基础知识题库(含答案)

一.单项选择题: 1.大中型建设工程项目立项批准后&#xff0c;在工程开工前&#xff0c;应当由( )按照有关规定申请领取施工许可证。A.建设单位 B.施工单位 C.总承包单位 D.监理单位 2.建设单位申领建筑工程施工许可证后&#xff0c;既不开工又不申请延期或者超过延期时限的&a…

14,15-EET/DHET Hypertension ELISA Kit--Detroit RD

用于14,15-EET/DHET测量的DH2与用于14,15-DHET测量的DH1相同。与DH2相比&#xff0c;与DH1的唯一区别是样品制备步骤&#xff08;而不是Elisa试剂盒&#xff09;&#xff0c;其中EET被化学改为DHET。 货号&#xff1a;DH2 名称&#xff1a;14,15-EET/DHET Hypertension ELISA…

C#——值类型和引用类型的区别详情

值类型和引用类型的区别 值类型 值类型&#xff1a; 常用的基本数据类型都是值类型&#xff1a;bool 、char、int、 double、 float、long 、 byte 、ulong、uint、枚举类型、 结构体类型等特点: 在赋值的过程当中&#xff0c;把值的本身赋值给另一个变量&#xff0c;再修改…

使用 PNPM 从零搭建 Monorepo,测试组件并发布

1 目标 通过 PNPM 创建一个 monorepo&#xff08;多个项目在一个代码仓库&#xff09;项目&#xff0c;形成一个通用的仓库模板。 这里以在该 monorepo 项目中搭建 web components 类型的组件库为例&#xff0c;介绍从仓库搭建、组件测试到组件发布的整个流程。 这个仓库既可…

gpt、llama大模型模型结构细节探索

参考&#xff1a; https://github.com/naklecha/llama3-from-scratch&#xff08;一定要看看&#xff09; https://github.com/karpathy/build-nanogpt/blob/master/play.ipynb 视频&#xff1a; https://www.youtube.com/watch?vl8pRSuU81PU https://tiktokenizer.vercel…

SiLM59xx系列SiLM5932SHOCG-DG 一款支持主动短路保护功能(ASC)单通道隔离驱动器

SiLM59xx系列SiLM5932SHOCG-DG是一款单通道隔离驱动器&#xff0c;提供12A源电流和12A灌电流。主动保护功能包括退饱和过流检测、UVLO、隔离故障报警和 4A 米勒钳位。输入侧电源的工作电压为3V至5.5V&#xff0c;输出侧电源的工作电压范围为13V至30V。所有电源电压引脚都有欠压…

Java面向对象之static关键字,可变参数,递归,数组常见算法,对象数组,方法参数

第一章.static关键字 1.static的介绍以及基本使用 1.概述:static是一个静态关键字 2.使用:a.修饰一个成员变量:static 数据类型 变量名b.修饰一个方法:修饰符 static 返回值类型 方法名(形参){方法体return 结果}3.调用静态成员:类名直接调用(不用new对象)4.静态成员特点:a.静…