【发布时间】:2009-11-08 20:43:42
【问题描述】:
我有一个简单的类 Product 和一个名为 ProductSummaryControl 的 UserControl。 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 的多个实例对应于列表中的产品数量,但控件未正确绑定到数据。我在网上找到的所有自定义 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 的值并让绑定正常工作,所以我认为它也可以通过模板进行绑定。显然这两种情况的处理方式不同,但我仍然不明白如何。
【问题讨论】:
-
这对我有用。你能描述一下它是怎么出错的吗?当您在调试器下运行输出窗口时,您是否在输出窗口中看到任何绑定错误?
标签: wpf binding listbox user-controls itemtemplate