WPF如何将ListView的ItemsSource项本身绑定到自定义控件依赖属性
解决方案:绑定整个数据项到自定义控件依赖属性
嘿,这个需求其实很容易实现!在WPF/UWP的DataTemplate里,每个项的DataContext本身就是你的Device对象,所以要把整个对象绑定到自定义控件的依赖属性,只需要用不带Path的Binding或者显式指定Path=.就可以了。
具体修改代码:
把你原来的绑定代码改成下面两种方式之一都可以:
<ListView x:Name="deviceView" ItemsSource="{Binding Devices}"> <ListView.ItemTemplate> <DataTemplate> <Grid> <!-- 方式1:直接使用{Binding},默认绑定当前DataContext(也就是整个Device对象) --> <local:DeviceTile DeviceName="{Binding}"/> <!-- 方式2:显式指定Path=.,效果和上面完全一样 --> <!-- <local:DeviceTile DeviceName="{Binding Path=.}"/> --> </Grid> </DataTemplate> </ListView.ItemTemplate> </ListView>
额外注意点:
- 确保你的自定义控件
DeviceTile的DeviceName依赖属性的类型是Device(而不是字符串),这样才能正确接收整个对象。如果把属性名改成CurrentDevice这类更贴合语义的名字会更合理,但只要类型匹配就没问题。 - 这种绑定方式不仅适用于ListView,所有使用DataTemplate的控件(比如ItemsControl、GridView等)都适用,本质都是利用DataContext就是当前项这个特性。
内容的提问来源于stack exchange,提问作者MrWoffle
相关产品推荐
相关产品推荐

