TabControl не может создать первую вкладку при использовании привязки данных - PullRequest
3 голосов
/ 24 мая 2011

У меня есть вкладка для управления, какие источники я связываю с наблюдаемой коллекцией. Я использую шаблоны данных для определения визуального представления заголовков и содержимого вкладки.

Когда я добавляю элемент в наблюдаемую коллекцию, я получаю заголовок вкладки, но без содержимого. Когда я добавляю второй элемент в наблюдаемую коллекцию, я получаю заголовки вкладок и содержимое для обоих элементов. Итак, сначала, когда второй элемент добавляется в наблюдаемую коллекцию, создается содержимое для первой вкладки. Кто-нибудь знает, если это ошибка или может объяснить, почему это происходит? Есть ли обходной путь? Я попытался использовать селектор шаблонов с тем же результатом. Ниже приведен пример кода для воспроизведения.

Я проверял это как на .NET 3.5, так и на 4.0.

XAML:

<Window x:Class="TabDemo.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300">

    <StackPanel>
        <Button Content="Add new tabitem" Click="OnAdd" />

        <TabControl 
            ItemsSource="{Binding Path=Items}">
            <TabControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding}" />
                </DataTemplate>
            </TabControl.ItemTemplate>
            <TabControl.ContentTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding}" />
                </DataTemplate>
            </TabControl.ContentTemplate>
        </TabControl>
    </StackPanel>

</Window>

Код:

public partial class Window1
{
    public Window1()
    {
        InitializeComponent();

        Items = new ObservableCollection<int>(); 
        DataContext = this;
    }

    public ObservableCollection<int> Items { get; set; }

    private void OnAdd(object sender, RoutedEventArgs e)
    {
        Items.Add(_random.Next(100));
    }

    private readonly Random _random = new Random();
}

1 Ответ

4 голосов
/ 24 мая 2011

Если вы установите SelectedIndex="0" на вашем TabControl, это обойдет эту проблему. Я считаю, что это связано с ошибкой, приводящей к SelectedIndex при добавлении / удалении элементов.

...