ListBox.ItemTemplate中的数据绑定UserControl

时间:2009-11-08 20:43:42

标签: wpf binding listbox user-controls itemtemplate

我有一个简单的类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的值并使绑定正常工作,所以我认为它也适用于通过模板绑定。显然这两个案件的处理方式不同,但我仍然不明白如何。

2 个答案:

答案 0 :(得分:1)

我终于有机会与此斗争并使其发挥作用。我不得不删除StaticResource,因为它干扰了设置DataContext的{​​{1}}。我仍然不明白为什么,但删除资源允许绑定发生。我还必须将ProductSummaryControl指向拥有模板化控件的DataContext的Content属性。

ContentPresenter

答案 1 :(得分:0)

可能是您构建ProductSummaryControl的方式存在问题,因为即使您没有放置{Binding},DataContext也会自动继承到控件

相关问题