WPF如何将tabitem与列表绑定

时间:2011-03-22 13:55:02

标签: c# wpf data-binding tabcontrol

我有以下问题:

我的应用程序中加载了一些数据,需要将它们放在标签控件中。

数据格式为:

class objectType1
{
    string property_1;
    string prorerty_2;
}

class mainObject
{
    string mainProperty_1;
    string mainProperty_2;
    List<objectType1> objectsList;
}

并且所有数据都加载在

类型的对象中
List<mainObject> myListofObjects

到目前为止,我设法创建了关于myListofObjects项的tabitems (即如果列表有5个对象,则使用包含信息mainProperty_1和mainProperty_2的标题创建5个选项卡) 现在我需要将每个objectsList中包含的数据添加到各自的选项卡中......

mainProperty_1代表一个必须加载的图像......

<TabControl x:Name="_DataList" Margin="10">
        <!-- Header -->
        <TabControl.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Image Height="18" Source="{Binding mainProperty_1/>
                    <TextBlock Text="{Binding mainProperty_2}" Margin="2,0,0,0" />
                </StackPanel>
            </DataTemplate>
        </TabControl.ItemTemplate>
        <!-- Content -->
        <TabControl.ContentTemplate>
            <DataTemplate x:Name="objectDataTemplate">
                <Grid Margin="5">
                    <StackPanel Orientation="Horizontal">
                        <Image Source="{Binding property_1}" ToolTip="{Binding property_2}" IsHitTestVisible="false" Stretch="Uniform"/>
                    </StackPanel>
                </Grid>
            </DataTemplate>
        </TabControl.ContentTemplate>
    </TabControl>

我将数据传递给后面带有

的代码中的tabcontrol
_DataList.ItemsSource = myListofObjects;

这不适用于内容......

标题加载得很好(图像和文本都是......)

任何人都知道如何做到这一点?

非常感谢!

2 个答案:

答案 0 :(得分:0)

1)您是否尝试通过绑定连接到列表?

var b = new Binding("myListofObjects");
BindingOperations.SetBinding(_DataList, ItemsControl.ItemsSourceProperty, b);

2)如果您正在使用绑定,是否设置了适当的DataContext?

答案 1 :(得分:0)

您的ContentTemplate似乎错了:

 <TabControl x:Name="_DataList" Margin="10">
    <!-- Header -->
    <TabControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Image Height="18" Source="{Binding mainProperty_1/>
                <TextBlock Text="{Binding mainProperty_2}" Margin="2,0,0,0" />
            </StackPanel>
        </DataTemplate>
    </TabControl.ItemTemplate>
    <!-- Content -->
    <TabControl.ContentTemplate><!-- its bound to one mainObject -->
        <DataTemplate x:Name="objectDataTemplate">
 <!-- if you wanna bind to something from your objectsList you have to threat it like a list, cause it is :) -->

<ListBox Itemssource={Binding objectsList}>
<ListBox.ItemTemplate>
    <DataTemplate DataType="{x:Type objectType1}">
       <StackPanel Orientation="Horizontal">
           <Image Source="{Binding property_1}" ToolTip="{Binding property_2}" IsHitTestVisible="false" Stretch="Uniform"/>
       </StackPanel>
    </DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>