当前位置: 首页 > web >正文

WPF之绑定!

文章目录

  • 前言
  • 一、绑定基础
  • 二、使用
    • 1.XML元素之间的绑定
    • 2.绑定模式
    • 绑定模式分类表
    • 3.使用ListBox绑定


前言

WPF之绑定!


一、绑定基础

绑定源:通常是一个数据对象,例如类实例、集合或 XML 数据。
绑定目标:一般是一个 UI 元素的属性。
数据绑定的核心元素
Binding 对象:描述了源属性和目标属性之间的连接。
Binding Target:通常是一个 DependencyProperty(依赖属性)。
Binding Source:可以是任意对象。
DataContext:数据上下文,通常用于为整个控件树提供绑定源的默认数据源。
数据转换:在源和目标之间转换数据,例如格式化显示数据。

二、使用

1.XML元素之间的绑定

XML元素之间的绑定

<TextBox Text="{Binding ElementName=slider, Path=Value}" Margin="5" Height="30"/>

Text属性通过数据绑定(Binding)连接到Slider的Value属性。
ElementName=slider: 绑定源是名为slider的控件。
Path=Value: 绑定到Slider的Value属性(即滑块当前值)。绑定到那个属性
​​效果​​:当拖动滑块时,这个文本框会实时显示滑块当前值(双向绑定默认,所以如果用户在文本框中输入有效数值,滑块也会相应移动)。

<Grid><StackPanel><Slider x:Name="slider" Margin="5"/><TextBox Text="{Binding ElementName=slider,Path=Value}"    Margin="5" Height="30"/><TextBox  Margin="5" Height="30"/><TextBox  Margin="5" Height="30"/></StackPanel>
</Grid>

在这里插入图片描述

2.绑定模式

绑定模式分类表

绑定模式数据流向默认适用控件应用场景性能特点
OneWay源 → 目标TextBlock, Label, ProgressBar数据显示、计算结果展示中等
TwoWay源 ↔ 目标TextBox, Slider, CheckBox表单输入、用户配置设置较高
OneTime仅初始时所有显示控件静态数据、初始化配置最低
OneWayToSource目标 → 源Slider, ScrollBar用户输入收集、无初始值绑定中等
Default自动决定-通用场景自动优化
<Grid><StackPanel><Slider x:Name="slider" Margin="5"/><!-- 只显示第一次的数据源的值 --><TextBox Text="{Binding ElementName=slider,Path=Value, Mode=OneTime}"    Margin="5" Height="30"/><!-- 单向绑定 数据源到目标 --><TextBox Text="{Binding ElementName=slider,Path=Value,Mode=OneWay}"  Margin="5" Height="30"/><!-- 单向绑定 目标到数据源 --><TextBox Text="{Binding ElementName=slider,Path=Value, Mode=OneWayToSource}"  Margin="5" Height="30"/><!-- 双向绑定 目标到数据源 数据源到目标 --><TextBox Text="{Binding ElementName=slider,Path=Value, Mode=TwoWay}"  Margin="5" Height="30"/><!-- 与双向绑定一样 --><TextBox Text="{Binding ElementName=slider,Path=Value, Mode=Default}"  Margin="5" Height="30"/></StackPanel>
</Grid>

效果图
在这里插入图片描述

3.使用ListBox绑定

public class ViewAViewModel:BindableBase
{// 字符串集合属性private ObservableCollection<string> _items;public ObservableCollection<string> Items{get => _items;set => SetProperty(ref _items, value);}// 自定义对象集合属性private ObservableCollection<Person> _persons;public ObservableCollection<Person> Persons{get => _persons;set => SetProperty(ref _persons, value);}// 构造函数public ViewAViewModel(){// 初始化字符串集合Items = new ObservableCollection<string>{"项目 1","项目 2","项目 3"};// 初始化自定义对象集合Persons = new ObservableCollection<Person>{new Person { Id = 1, Name = "张三", Age = 30 },new Person { Id = 2, Name = "李四", Age = 25 },new Person { Id = 3, Name = "王五", Age = 28 }};}
}
// 自定义模型类
public class Person : BindableBase
{private int _id;public int Id{get => _id;set => SetProperty(ref _id, value);}private string _name;public string Name{get => _name;set => SetProperty(ref _name, value);}private int _age;public int Age{get => _age;set => SetProperty(ref _age, value);}
}
    </Grid><!-- 定义资源 --><UserControl.Resources><!-- 自定义数据显示模板 --><DataTemplate DataType="{x:Type local:Person}"><StackPanel Orientation="Horizontal" Margin="5"><TextBlock Text="{Binding Id}" Width="30"/><TextBlock Text="{Binding Name}" Width="100" FontWeight="Bold"/><TextBlock Text="{Binding Age}" Width="50"/></StackPanel></DataTemplate></UserControl.Resources>
```
---
效果图
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b3040a3c38e04ab18102e7690448e042.png)
http://www.xdnf.cn/news/17647.html

相关文章:

  • LeetCode——241.为运算表达式设计优先级
  • 在 RHEL9 上搭建企业级 Web 服务(Tomcat)
  • Android Audio实战——获取活跃音频类型(十五)
  • 深度学习与遥感入门(五)|GAT 构图消融 + 分块全图预测:更稳更快的高光谱图分类(PyTorch Geometric 实战)
  • 【数据可视化-86】中国育儿成本深度可视化分析(基于《中国统计年鉴2023》数据):用Python和pyecharts打造炫酷可视化大屏
  • 论文阅读 arxiv 2024 MemGPT: Towards LLMs as Operating Systems
  • Apache IoTDB 全场景部署:基于 Apache IoTDB 的跨「端-边-云」的时序数据库 DB+AI
  • Java 之抽象类和接口
  • SSH远程连接TRAE时显示权限被拒绝检查方案
  • 可视化程序设计(4) - 第一个图形窗口程序
  • Java进阶之单列集合Set接口下的通用方法
  • Linux下的软件编程——标准IO
  • ECharts Y轴5等分终极解决方案 - 动态适配缩放场景
  • 后量子密码学的迁移与安全保障:迎接量子时代的挑战
  • NLP---IF-IDF案例分析
  • FreeRTOS学习:优化系统
  • LeetCode_哈希表
  • 论文阅读:Aircraft Trajectory Prediction Based on Residual Recurrent Neural Networks
  • OpenAI正式发布GPT-5:迈向AGI的关键一步
  • sqllabs——Less1
  • MySQL面试题及详细答案 155道(041-060)
  • ThreadLocal有哪些内存泄露问题,如何避免?
  • Mysql笔记-存储过程与存储函数
  • 【Linux】使用静态 BusyBox 解决操作系统“塌方”问题
  • ADK[3]历史对话信息保存机制与构建多轮对话机器人
  • 单片机捷径
  • nginx下lua的实现机制、Lua错误处理、面向对象
  • Unity 遮挡显示效果 Shader
  • 异步问题的概念和消除问题技巧
  • 机器学习 DBScan