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

WPF中的DataTemplate

在 WPF 中,数据模板(DataTemplate)同样用于定义“数据如何在 UI 上显示”。以下是一个典型的 WPF 数据模板示例,包含定义、使用及核心特性说明。

场景说明

假设有一个 Student 类(数据模型),包含 Name(姓名)、Age(年龄)、Grade(年级)属性,我们希望在 UI 上以“卡片式”展示该数据,而不是默认的类名文本。

完整示例代码

<Window x:Class="WpfDataTemplateDemo.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfDataTemplateDemo"Title="WPF 数据模板示例" Height="300" Width="400"><!-- 1. 定义数据模板:WPF 中数据模板通常放在 Resources 资源集合中 --><Window.Resources><!-- 为 Student 类型定义模板:DataType 指定数据类型(无需 x:Key,自动匹配) --><DataTemplate DataType="{x:Type local:Student}"><!-- 模板内容:自定义 Student 数据的 UI 结构 --><Border Background="LightGray" BorderBrush="Gray" BorderThickness="1" CornerRadius="5" Padding="10" Margin="5"><StackPanel><TextBlock Text="学生信息" FontWeight="Bold" FontSize="14"/><TextBlock Text="{Binding Name}" Margin="0,5,0,0"/> <!-- 绑定 Name 属性 --><TextBlock Text="{Binding Age, StringFormat='年龄:{0}'}"/> <!-- 格式化显示 --><TextBlock Text="{Binding Grade, StringFormat='年级:{0}'}"/></StackPanel></Border></DataTemplate></Window.Resources><!-- 2. 使用数据模板:通过 ContentControl 或列表控件展示数据 --><Grid><!-- 单个数据展示:Content 绑定 Student 对象,WPF 会自动匹配上面的模板 --><ContentControl Content="{Binding CurrentStudent}"/><!-- 列表数据展示:ListBox 的 ItemsSource 绑定 Student 集合,每个项自动应用模板 --><!-- <ListBox ItemsSource="{Binding StudentList}"/> --></Grid>
</Window>

后台数据模型(C#)

// Student 数据类
namespace WpfDataTemplateDemo
{public class Student{public string Name { get; set; }public int Age { get; set; }public string Grade { get; set; }}// 窗口后台数据上下文public partial class MainWindow : Window{public Student CurrentStudent { get; set; }public MainWindow(){InitializeComponent();// 初始化数据CurrentStudent = new Student { Name = "张三", Age = 15, Grade = "高一(3)班" };DataContext = this; // 绑定数据上下文}}
}

运行效果

UI 会显示一个浅灰色卡片,包含“学生信息”标题,以及绑定的“张三”“年龄:15”“年级:高一(3)班”文本,而不是默认的 WpfDataTemplateDemo.Student 类名。

WPF 数据模板的核心特点(通过示例体现)

  1. 存储位置:通常放在 Resources 集合中(如 <Window.Resources>),而 Avalonia 放在 DataTemplates 中。
  2. 自动匹配:通过 DataType="{x:Type local:Student}" 指定模板对应的类型,无需 x:Key,WPF 会自动为该类型的数据应用模板。
  3. 适用场景
    • 单个数据:通过 ContentControl.Content 绑定对象,自动应用模板。
    • 列表数据:通过 ListBox.ItemsSource 绑定集合,每个子项自动应用模板。
  4. 匹配限制:WPF 模板默认只精确匹配具体类,不支持接口或派生类(例如,Student 的派生类 GoodStudent 不会自动匹配 Student 模板,而 Avalonia 支持)。

这个例子展示了 WPF 数据模板的核心用法:通过 Resources 定义模板,关联数据类型,让框架自动将数据转换为指定的 UI 样式,实现数据与 UI 的解耦。

http://www.dtcms.com/a/494586.html

相关文章:

  • 浙江建设局网站泰安北京网站建设公司哪家好
  • TensorFlow2 Python深度学习 - 使用Dropout层解决过拟合问题
  • Python数据分析实战:基于5年地铁犯罪数据构建多维安全评估模型【数据集可下载】
  • YOLO系列——OpenCV DNN模块在YOLOv11检测物体时输出的边界框坐标问题
  • 网站地图怎么用wordpress发布文章添加新字段
  • OpenCV轻松入门_面向python(第六章 阈值处理)
  • Visual Studio 2017(VS2017)可以编译 OpenCV 4.5.5 为 32 位(x86)版本
  • 使用 Wireshark 进行 HTTP、MQTT、WebSocket 抓包的详细教程
  • 一个基于BiTCN-LSTM混合神经网络的时间序列预测MATLAB程序
  • 火是用什么做的视频网站wordpress贴吧主题
  • 团购网站开发网址交易网站
  • git revert commit和undo commit的区别
  • HTTP 协议的演进之路:从 1.1 到 3.0
  • 开源CICD工具Arbess,从安装到入门零基础指南
  • Maya动画基础:自动关键帧切换、曲线图编辑器、摄影机录制动画
  • Unreal5从入门到精通之一些有用的编辑器首选项
  • 深度解析:HTTP/2 与 HTTP/3 的适用场景与技术取舍
  • 三勾软件| 用SpringBoot+Element-UI+UniApp+Redis+MySQL打造的点餐连锁系统
  • 优化网站多少钱网站怎么做排查修复
  • 成都最好的网站推广优化公司学ui需要什么基础呢
  • 高并发系统性能测试:JMeter_Gatling 压测实战,测试场景设计与结果分析
  • 高并发体育直播平台架构实战:熊猫比分源码设计解析
  • 重庆网站建设开发wordpress哪里查看id
  • Docker下部署RocketMQ5.3.3
  • 桥田动态 | 多展位跨域协同,桥田快换盘持续赋能机器人“无界切换”
  • [AI学习:SPIN -win-安装SPIN-工具过程 SPIN win 电脑安装=accoda 环境-第三篇:解决报错]
  • 我有域名怎么做网站免费开网店app
  • iOS八股文之 多线程
  • C++ 方向 Web 自动化测试入门指南:从概念到 Selenium 实战
  • 掌握 iOS 26 App 运行状况,多工具协作下的监控策略