我的页面设置如下:
<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所期望的那样。如果我使用Result={Binding Path=.}或similiar,它根本就不会更新。
据我所知,在WPF {Binding}中,它实际上绑定到数据对象本身,而不是附加绑定到的控件。有趣的是,当我必须为结果选择绑定路径时,IntelliSense实际上显示了预期的CarResult对象的属性。
UWP是不是又在做自己的事情了,我只是个傻瓜,做错了,还是真的是个bug?我挣扎了很久,找不到任何关于它的信息。
发布于 2018-08-16 12:05:50
除非您正在更改DataContext的CarResultControl,否则这实际上应该是您预期的工作方式。
UserControls实际上以一种有点奇怪的方式工作--当在构造函数中设置this.DataContext = this时,属性上的绑定实际上将相对于UserControl本身。
要解决这个问题,您必须确保不更改控件本身的DataContext。最简单的方法是将x:Name添加到根Grid (或UserControl内容中的任何控件),然后设置其DataContext。
RootGrid.DataContext = this;这样,您将把RootGrid的数据上下文设置为控件本身,但是用户控件的属性将绑定到相对于用户控件所在位置的数据上下文,此处绑定到列表项。
https://stackoverflow.com/questions/51876232
复制相似问题