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