Связывание данных с WPF - PullRequest
       23

Связывание данных с WPF

3 голосов
/ 20 апреля 2011

Я новичок в WPF, и это следующее на некоторое время озадачило меня:

В моей модели есть объект observableCollection of People, связанный с моим tabControl. Таким образом, каждый новый объект People добавляется, создается новая вкладка с People.Title в качестве заголовка вкладки.

Каждый объект People имеет объект ObservableCollection of Friend. Внутри вкладки я хотел бы иметь список из двух текстовых полей, одно для Friend.FirstName и другое для Friend.LastName.

Мое первое требование работает нормально, но второе выдает ошибку «ItemsSource уже используется»

Вот мой код:

<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>

Я ценю вашу помощь.

1 Ответ

1 голос
/ 20 апреля 2011

Вы не можете добавлять элементы в 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>
...