3

我是 WPF 的新手,下面的内容让我困惑了一段时间:

我的模型中有一个 observableCollection of People 对象,它绑定到我的 tabControl。因此,每添加一个新的 People 对象,就会创建一个新选项卡,其中 People.Title 作为选项卡的标题。

每个 People 对象都有一个 Friend 对象的 ObservableCollection。在选项卡内部,我想要一个包含两个文本框的列表,一个用于 Friend.FirstName,另一个用于 Friend.LastName。

我的第一个要求工作正常,但第二个要求给我一个错误'ItemsSource is already in use'

到目前为止,这是我的代码:

<TabControl Name="ConversationTabs" Grid.Row="0" 
                ItemsSource="{Binding}" 
                ItemTemplate="{StaticResource HeaderInfoTabControl}"
                ContentTemplate="{StaticResource DialogueList}" />

<Window.Resources>
    <DataTemplate x:Key="HeaderInfoTabControl">
        <TextBlock Text="{Binding Title}" />
    </DataTemplate>

    <DataTemplate x:Key="DialogueList">
        <ItemsControl ItemsSource="{Binding Path=DialogueCollectionVM}"> 
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=Sent}" />
                <TextBlock Text="{Binding Path=DateSent}" />
                <TextBlock Text="{Binding Path=Message}" />
            </StackPanel>
        </ItemsControl>
    </DataTemplate>

</Window.Resources>

我感谢您的帮助。

4

1 回答 1

1

您不能将项目添加到 ItemsControl 并同时使用自动填充(通过 ItemsSource)。如果该 StackPanel 应该用于 ItemsSource 中的项目,您应该这样做:

<ItemsControl ItemsSource="{Binding Path=DialogueCollectionVM}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=Sent}" />
                <TextBlock Text="{Binding Path=DateSent}" />
                <TextBlock Text="{Binding Path=Message}" />
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
于 2011-04-20T07:08:40.007 回答