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

时间:2018-08-16 11:42:31

标签: c# binding uwp

我的页面设置如下:

   <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=.}或类似名称,它根本不会更新。

据我在WPF {Binding}中习惯的实际绑定到数据对象本身,而不是绑定所绑定的控件。有趣的是,当我必须为 Result 选择绑定路径时,IntelliSense实际上会显示预期的CarResult对象的属性。

UWP还是在这里做自己的事吗,我只是一个傻瓜而做错了吗,或者这真的是一个错误吗?我苦苦挣扎了很长时间,找不到任何信息。

1 个答案:

答案 0 :(得分:1)

除非您更改DataContext的{​​{1}},否则实际上应该按照您期望的方式工作。

CarResultControl实际上以一种怪异的方式工作-在构造函数中设置UserControls时,属性上的绑定实际上是相对于this.DataContext = this本身的。

要解决此问题,必须确保不要更改控件本身的UserControl。最简单的方法是将DataContext添加到根x:Name(或Grid内容中具有的任何控件,然后设置其UserControl

DataContext

这样,您将RootGrid.DataContext = this; 的数据上下文设置为控件本身,但是用户控件的属性将绑定到相对于用户控件所在位置的数据上下文,这里是列表项