You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinUI 3技术问询:如何在DataTemplate中绑定数据本身?

问题

现有如下UWP的ListView代码:

<ListView ItemsSource="{x:Bind People}">
  <ListView.ItemTemplate x:DataType="models:Person">
    <controls:PersonItem Person="{...}" />
  </ListView.ItemTemplate>
</ListView>

其中:

  • People是后台代码中定义的ObservableCollection<Person>类型属性
  • Person类实现了INotifyPropertyChanged,定义如下:
public class Person : INotifyPropertyChanged
{
  public virtual Guid Id { get; set; }
  public virtual string Name { get; set; }

  // INotifyPropertyChanged的实现代码
  ...
}
  • PersonItem是自定义用户控件,已定义名为Person的DependencyProperty,用于接收Person对象并展示其成员信息

需要将PersonItem.Person属性绑定到DataTemplate中的当前数据对象本身,即上述代码中的{...}应替换为什么内容?实际场景中Person类属性数量较多,不想为每个属性单独定义依赖属性,希望直接绑定整个对象。

解决方案

你可以直接绑定当前数据上下文的自身,根据你使用的x:Bind语法,有两种简洁写法:

1. x:Bind简化写法

由于已经通过x:DataType="models:Person"指定了数据类型,直接使用{x:Bind}即可绑定当前的Person对象:

<controls:PersonItem Person="{x:Bind}" />

这是x:Bind的语法糖,编译器会自动推断类型,兼具类型安全性和更好的性能。

2. 传统Binding写法

如果需要设置绑定模式等额外参数,可绑定到当前元素的DataContext:

<controls:PersonItem Person="{Binding}" />

这种写法无需指定数据类型,直接将ListView当前项的Person对象传递给PersonItem的Person依赖属性。

两种方式都能一次性传递整个Person对象,避免为大量属性单独定义绑定的繁琐工作。

内容的提问来源于stack exchange,提问作者AkiraVoid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:07:46