我有一个简单的类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设置为一个列表,我看到与列表中产品数量相对应的多个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的值,并且绑定可以正常工作,因此我认为通过模板绑定也可以正常工作。显然,这两种情况被不同地处理,但我仍然不理解如何处理。