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

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.dtcms.com/a/325610.html

相关文章:

  • OpenCV计算机视觉实战(19)——特征描述符详解
  • 玩转Docker | 使用Docker部署Trilium Notes知识库工具
  • typecho博客设置浏览器标签页图标icon
  • 石材 × 设计:解锁永恒材质的四大灵感密码
  • 数据结构 双链表与LinkedList
  • 18.WEB 服务器
  • 超算中心的一台服务器上有多少个CPU,多少个核?
  • JVM基础【Java】
  • 力扣164:最大间距
  • 深入理解与灵活应用 std::optional
  • vue3中的子组件向父组件通信和父组件向子组件通信
  • python --nacos相关
  • MSE ZooKeeper:Flink高可用架构的企业级选择
  • 《图解技术体系》New generation CMDB resource model framework
  • 自然语言处理实战:用LSTM打造武侠小说生成器
  • 【AI论文】R-Zero:从零数据起步的自进化推理大语言模型
  • JavaScript 中如何实现大文件并行下载
  • AI(2)-神经网络(激活函数)
  • 支持小语种的在线客服系统,自动翻译双方语言,适合对接跨境海外客户
  • NY185NY190美光固态闪存NY193NY195
  • 《深度剖析前端框架中错误边界:异常处理的基石与进阶》
  • pom.xml父子模块配置
  • 深入理解Android Kotlin Flow:响应式编程的现代实践
  • 部署open-webui到本地
  • TDengine IDMP 基本功能(1.界面布局和操作)
  • 某地渣库边坡自动化监测服务项目
  • 企业高性能web服务器1
  • FPGA实现Aurora 8B10B图像视频传输,基于GTX高速收发器,提供4套工程源码和技术支持
  • 新手向:Python实现数据可视化图表生成
  • LVPECL、LVDS、LVTTL、LVCMOS四种逻辑电平标准的全面对比