我在尝试动态生成WPF中的内容以及绑定数据之后遇到了一些麻烦 .
我有以下场景:TabControl - 通过DataTemplate动态生成TabItems - 在TabItems中,我有我希望绑定的DataTemplate生成的动态内容(ListBox) .
代码如下:
:: 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>
:: ListBox的模板在每个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();
其中'plugins'是Enumerable
ListBox没有界限 . 我还尝试在TabItem中找到ListBox来设置ItemSource属性,但根本没有成功 .
有人知道如何做到这一点?提前致谢 .
1 回答
TabControl的模板使用ContentPresenter来呈现SelectedContent,如下所示:
ContentPresenter在生活中的工作是扩展DataTemplate . 当它这样做时,它将构造的可视树的DataContext设置为其Content属性,在这种情况下绑定到SelectedContent .
SelectedContent是从TabItem的Content属性设置的,而不是它的DataContext . 因此,在TabItem上设置DataContext并不是't set the DataContext on the content area'的可视化树 .
你想要的是: