[英]UWP Binding property to current item of ItemsSource
我的页面设置如下:
<ListView ItemsSource="{Binding RecentResults}">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid Background="Transparent" Orientation="Horizontal" ItemWidth="400" ItemHeight="300" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<ui:CarResultControl Result="{Binding}" Padding="0" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我绑定到一个本地属性,它异步提供我的结果。 这工作得很好。
现在我的CarResultControl
绑定到它的本地Result
属性(这是一个DependencyProperty
)。 当我指定Result={Binding}
,属性会得到更新,但不是CarResult
而是CarResultControl
预期的CarResultControl
。 如果我使用Result={Binding Path=.}
或类似的,它根本不会更新。
就我在 WPF 中的习惯而言, {Binding}
实际上绑定到数据对象本身,而不是您将绑定附加到的控件。 有趣的是,当我必须为Result选择绑定路径时,IntelliSense 实际上显示了预期CarResult
对象的属性。
UWP 是否又在这里做自己的事情,我只是一个傻瓜并且做错了还是这真的是一个错误? 我挣扎了很长时间,找不到任何有关它的信息。
这实际上应该按照您期望的方式工作,除非您正在更改CarResultControl
的DataContext
。
UserControls
实际上以一种this.DataContext = this
方式工作——当你在构造函数中设置this.DataContext = this
时,属性上的绑定实际上是相对于UserControl
本身的。
要解决此问题,您必须确保不要更改控件本身的DataContext
。 最简单的方法是将x:Name
添加到根Grid
(或您在UserControl
内容中拥有的任何UserControl
,然后设置其DataContext
:
RootGrid.DataContext = this;
这样,您将RootGrid
的数据上下文设置为控件本身,但用户控件的属性将绑定到相对于用户控件所在位置的数据上下文,这里是列表项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.