gpt4 book ai didi

wpf - ListBox.ItemTemplate 中的数据绑定(bind)用户控件

转载 作者:行者123 更新时间:2023-12-02 04:17:58 24 4
gpt4 key购买 nike

我有一个简单的产品类和一个名为 ProductSummaryControl 的用户控件。 ProductSummaryControl 显示传递到其 DataContext 的 Product 类的详细信息。我已经验证这在我手动设置控件及其属性时有效。

当我尝试将 ProductSummaryControl 用作 ListBox ItemTemplate 的一部分时遇到了问题。这是相关代码:

<ListBox x:Name="ProductsList" HorizontalContentAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<local:ProductSummaryControl DataContext="{Binding}" HorizontalAlignment="Stretch"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

我将 ListBox ItemsSource 设置为 List,我看到 ProductSummaryControl 的多个实例对应于列表中的产品数量,但控件未正确绑定(bind)到数据。我在网上找到的所有自定义 ItemTemplate 的示例都表明 {Binding} 是获取项目值的正确方法,但我显然遗漏了一些东西......

更新:

我做了更多研究,发现 ProductSummaryControl 的 DataContext 被设置为 Product() 的默认实例。我认为这是因为:
 <UserControl.Resources>
<DBSchmid_Data:Product x:Key="ProductDataSource" d:IsDataSource="True"/>
</UserControl.Resources>
<UserControl.DataContext>
<Binding Mode="OneWay" Source="{StaticResource ProductDataSource}"/>
</UserControl.DataContext>

这是因为在 Blend 中设置了 UserControl 的 DataContext,以便控件中的各种元素可以引用继承的 DataContext 的属性。我验证我可以通过按钮单击方法更改 DataContext 的值并让绑定(bind)正常工作,所以我认为它也可以通过模板进行绑定(bind)。显然这两种情况的处理方式不同,但我仍然不明白如何处理。

最佳答案

我终于有机会与这个进行更多的斗争并让它发挥作用。我不得不删除 StaticResource ,因为它干扰了设置 DataContextProductSummaryControl .我仍然不明白为什么,但删除资源允许绑定(bind)发生。我还不得不指出DataContextContentPresenter 的 Content 属性拥有模板化控件。

<DataTemplate>
<local:ProductSummaryControl DataContext="{TemplateBinding Content}"
HorizontalAlignment="Stretch"/>
</DataTemplate>

关于wpf - ListBox.ItemTemplate 中的数据绑定(bind)用户控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1697876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com