У меня есть вкладка для управления, какие источники я связываю с наблюдаемой коллекцией. Я использую шаблоны данных для определения визуального представления заголовков и содержимого вкладки.
Когда я добавляю элемент в наблюдаемую коллекцию, я получаю заголовок вкладки, но без содержимого. Когда я добавляю второй элемент в наблюдаемую коллекцию, я получаю заголовки вкладок и содержимое для обоих элементов. Итак, сначала, когда второй элемент добавляется в наблюдаемую коллекцию, создается содержимое для первой вкладки. Кто-нибудь знает, если это ошибка или может объяснить, почему это происходит? Есть ли обходной путь? Я попытался использовать селектор шаблонов с тем же результатом. Ниже приведен пример кода для воспроизведения.
Я проверял это как на .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();
}