MAUI 中的
DataTemplate主要用于为
CollectionView或
ListView的每一项定义自定义外观,核心是把数据对象“可视化”成你想要的 UI 结构。
用 DataTemplate 包裹你的自定义布局
最常用方式是在
CollectionView里通过
ItemTemplate设置一个
DataTemplate,里面写 XAML 布局(比如
Grid、
StackLayout),再用绑定语法
{Binding PropertyName} 显示数据字段。
确保集合绑定源(如 ItemsSource="{Binding Items}")是 IEnumerable<t></t>类型,且
T的属性有 get 访问器
DataTemplate内部的控件直接绑定到数据项的属性,不需要加
DataContext或
Source支持静态资源引用,比如复用
Style或
ControlTemplate
内联模板 vs 资源字典模板
简单场景可直接在
ItemTemplate里写布局;复杂或复用场景建议提成资源: 内联写法:在
CollectionView标签下直接嵌套
DataTemplate和子控件 资源写法:在
ResourceDictionary中定义
DataTemplate并设
x:Key,再用
ItemTemplate="{StaticResource MyTemplate}" 引用
资源方式更利于维护和跨页面复用,也支持主题切换时动态替换
用 DataTemplateSelector 实现多类型模板
当列表中数据类型不同(比如消息列表含文本、图片、链接),可用
DataTemplateSelector动态选模板: 新建类继承
DataTemplateSelector,重写
OnSelectTemplate方法 根据传入的
item类型或属性值返回对应
DataTemplate对象 在 XAML 中把该选择器赋给
CollectionView.ItemTemplate(不是模板本身)
注意绑定上下文和性能细节
DataTemplate每次渲染都会创建新实例,所以避免在模板里写耗时逻辑或重复初始化: 图片路径绑定推荐用
UriImageSource或缓存过的
ImageSource,别在
OnBindingContextChanged里反复 new 如果需要响应点击,优先用
TapGestureRecognizer绑定命令,而不是写后台代码找控件 调试时可临时加
BackgroundColor="LightBlue"看模板是否生效、是否被裁剪
基本上就这些。DataTemplate 不复杂但容易忽略绑定路径和生命周期,写完记得跑真机看看滚动是否流畅。
