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
相关产品推荐
相关产品推荐

