2009-11-08 76 views
3

我有一個簡單的類Product和一個名爲ProductSummaryControl的UserControl。 ProductSummaryControl顯示傳入其DataContext的Product類的詳細信息。我已經驗證了這一點,當我手動設置控件及其屬性時工作。ListBox.ItemTemplate中的數據綁定UserControl

我嘗試將ProductSummaryControl用作ListBox ItemTemplate的一部分時遇到問題。這是相關代碼:

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

我設置列表框的ItemsSource到一個列表,我看到對應的產品在列表中的號碼我ProductSummaryControl的多個實例,但控件沒有正確綁定到數據。所有我發現在網絡上定製的ItemTemplate的例子表明,{結合}是獲得該項目價值的正確方法,但我似乎失去了一些東西......

UPDATE:

我做了更多的研究,我發現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> 

這是通過混合設置UserControl的DataContext的,這樣在控制各種元素可以引用繼承的DataContext的特性造成的。我證實我可以通過按鈕單擊方法更改DataContext的值,並使綁定正常工作,所以我認爲它也可以通過模板進行綁定。顯然這兩起案件的處理方式不同,但我仍不明白。

+0

這對我有用。你能描述它是怎麼出錯的嗎?當您在調試器下運行時,您是否在「輸出」窗口中看到任何綁定錯誤? – itowlson 2009-11-08 20:54:29

回答

0

可能會對你的結構化的ProductSummaryControl方式的問題,因爲即使你不把{}綁定在DataContext將得到自動繼承到控制

1

我終於有機會與這更打併使其工作。我必須刪除StaticResource,因爲它正在干預ProductSummaryControlDataContext的設置。我仍然不明白爲什麼,但刪除資源允許綁定發生。我還必須將DataContext指向擁有模板控件的ContentPresenter的Content屬性。

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