Если вы помещаете элементы управления в свой DataTemplate, почему их отдельные состояния копируются или отражаются в каждой вкладке в TabControl?Вы изменяете это в одной вкладке, все остальные вкладки отражают, почему это ?!Мне кажется, TabControl инициализирует только один шаблонный ContentControl, и каждый щелчок по вкладке копирует весь контент в нем заново, оставляя старые контрольные состояния нетронутыми.Чтобы понять, что я имею в виду, подумайте над тем, чтобы поместить это в свой XAML-Pad:
<TabControl>
<TabControl.ContentTemplate>
<DataTemplate>
<Border>
<TextBox Text="test"/>
</Border>
</DataTemplate>
</TabControl.ContentTemplate>
<TabItem Header="Tab1"/>
<TabItem Header="Tab2"/>
</TabControl>
. Он создаст TabControl с двумя шаблонными вкладками.Теперь введите что-нибудь в TextBox и переключитесь на другую вкладку, введенный текст будет перенесен.Каждая вкладка теперь будет иметь одинаковое содержимое.Я не наблюдаю такого же поведения в ListBox или любом другом элементе управления, и это усложняет практическую работу, потому что каждый кусочек должен быть привязан к ViewModel, чтобы сделать его пригодным для использования в TabControl.Я заметил это странное поведение, когда расширители, которые я использовал в DataTemplate, открылись во всех моих вкладках, хотя я специально обратился к одной из них.В качестве обходного пути мне пришлось привязать «IsExpanded» к свойству в ViewModel, но это действительно отстойно.
Кто-нибудь знает, что здесь происходит?
РЕШЕНИЕ
<TabControl x:Name="MainTab" SelectedIndex="0"/>
...
Collection.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(Collection_CollectionChanged);
...
void Collection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add)
{
TabItem MyNewItem = new TabItem();
ContentPresenter MyContentPresenter = new ContentPresenter();
MyContentPresenter.ContentTemplate = (DataTemplate)this.FindResource("MyTemplate");
MyContentPresenter.Content = e.NewItems[0];
MyNewItem.Content = MyContentPresenter;
MainTab.Items.Add(MyNewItem );
}
}