c# - UWP 绑定属性到 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}
,属性 get 已更新,但未按预期使用CarResult
but CarResultControl
。如果我使用Result={Binding Path=.}
或类似,它根本不会更新。
据我在 WPF 中习惯它{Binding}
实际上绑定到数据对象本身,而不是您要附加绑定的控件。CarResult
有趣的是,当我必须为Result选择绑定路径时,IntelliSense 实际上会显示预期对象的属性。
UWP 又在这里做自己的事情了,我只是一个傻瓜做错了还是这真的是一个错误?我挣扎了足够长的时间,找不到任何有关它的信息。
解决方案
这实际上应该按照您期望的方式工作,除非您更改DataContext
.CarResultControl
UserControls
实际上以一种有点奇怪的方式工作 - 当您this.DataContext = this
在构造函数中设置时,属性上的绑定实际上将与UserControl
自身相关。
要解决此问题,您必须确保不要更改DataContext
控件本身。最简单的方法是添加x:Name
到根目录Grid
(或您在内容中拥有的任何控件UserControl
,然后设置其DataContext
:
RootGrid.DataContext = this;
这样,您将把数据上下文RootGrid
设置为控件本身,但用户控件的属性将绑定到相对于用户控件所在位置的数据上下文,这里是列表项。
推荐阅读
- apache-beam - 如何从 Apache Beam Row 写入 Avro 文件
- javascript - 如何对具有 document.querySelector 的函数进行单元测试?
- matplotlib - 使用 Matplotlib 理解和绘制 L2 正则化
- huawei-mobile-services - 应用程序在 AppGallery 和 GooglePlaystore 中使用相同的包名后,由于 Google Play 保护而被删除
- c# - Serilog ThreadId 始终输出为 1
- amazon-web-services - 使用会话凭据测试 Boto3 客户端
- reactjs - 将具有对象的状态传递给 React 中的另一个兄弟组件并映射它
- gcc - Cortex-M 编译器生成不正确的 FOR 循环
- html - 我创建了一个自定义光标,它工作正常,但是当我在网页上滚动时,光标失去了位置
- pine-script - 将研究/策略附加到 Tradingview 绘图工具