繁体   English   中英

UWP 绑定属性到 ItemsSource 的当前项目

[英]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 是否又在这里做自己的事情,我只是一个傻瓜并且做错了还是这真的是一个错误? 我挣扎了很长时间,找不到任何有关它的信息。

这实际上应该按照您期望的方式工作,除非您正在更改CarResultControlDataContext

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM