2010-06-14 51 views
1

我有一些麻煩試圖動態生成WPF中的內容和綁定數據後。綁定DataTemplates(或另一個aparach)

我有以下情形: TabControl的 - 通過的DataTemplate 動態生成的TabItems - 內的TabItems,我具有由產生的DataTemplate動態內容,我希望綁定(列表框)。

的代碼如下:

:: TabControl的

<TabControl Height="252" HorizontalAlignment="Left" Name="tabControl1" VerticalAlignment="Top" Width="458" Margin="12,12,12,12" ContentTemplate="{StaticResource tabItemContent}"></TabControl> 

::模板進行的TabControl生成的TabItems

<DataTemplate x:Key="tabItemContent"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="*" /> 
      </Grid.RowDefinitions> 
      <ListBox ItemTemplate="{StaticResource listBoxContent}" ItemsSource="{Binding}"> 
      </ListBox> 
     </Grid> 
    </DataTemplate> 

::裏面每個TabItem的

的模板列表框
<DataTemplate x:Key="listBoxContent"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="22"/> 
       <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <Image Grid.Column="0" Source="{Binding Path=PluginIcon}" /> 
      <TextBlock Grid.Column="1" Text="{Binding Path=Text}" /> 
     </Grid>   
    </DataTemplate> 

所以,當我嘗試做這個代碼在一個循環中創建的TabItems:

TabItem tabitem = tabControl1.Items[catIndex] as TabItem; 
    tabitem.DataContext = plugins.ToList(); 

其中「插件」是一個可枚舉

列表框是無界。 我也試着找到TabItem中的ListBox來設置ItemSource屬性,但沒有成功。

有人有關於如何做到這一點的想法? 在此先感謝。

回答

0

的TabControl的模板使用ContentPresenter來呈現SelectedContent,就像這樣:

<ContentPresenter Content="{TemplateBinding SelectedContent}" 
        ContentTemplate="{TemplateBinding ContentTemplate}" /> 

一個ContentPresenter在生活中的工作是擴大一個DataTemplate。因爲它這樣做,所以它將構造的可視化樹的DataContext設置爲它的Content屬性,在這種情況下,它被綁定到SelectedContent。

SelectedContent從TabItem的Content屬性設置,而不是其DataContext。因此,在TabItem上設置DataContext不會在內容區域的可視化樹上設置DataContext。

你想要的是:

tabItem.Content = plugins.ToList(); 
+0

非常感謝雷。有效! – 2010-06-14 17:26:27

相關問題