Привязка к ItemsSource TabControl в WPF

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

Я пытаюсь создать пользовательский элемент управления, который представляет то, что я называю рабочим пространством (ссылка из блога Джоша Смита). Рабочие пространства будут отображаться во вкладке. Я стремлюсь использовать интерфейс с вкладками для управления различными документами, которые я открыл, как в браузере исключительной рабочей книги.

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

До сих пор самым чистым решением, которое мне нравилось больше всего, пока я не столкнулся с многочисленными проблемами, было использование таблиц данных. В основном я сделал следующее:


            
                
            
             


   



TabControl.ItemsSource связан с наблюдаемой коллекцией (объекта), которая содержит все мои рабочие пространства.

Это прекрасно работает, за исключением 2 вещей:

Если я открою несколько клиентов, у меня будет открыто несколько рабочих областей. Из-за DataTemplate Recycling я теряю состояние при переключении с одной вкладки на другую. Так что все, что не связано, потеряет состояние.

Производительность переключения между различными рабочими пространствами (в которых используются разные шаблоны данных) очень низкая.

Итак ... Я нашел предложение от другого пользователя на SO, чтобы добавить пользовательские элементы управления в ObservableCOllection и отказаться от шаблонов данных. это теперь решает одну из проблем потери государства. однако теперь я столкнулся с 2 оставшимися проблемами:

Как установить свойство TabItem.Header без использования DataTemplateСкорость переключения между вкладками вперед-назад остается низкой, если только они не принадлежат одному и тому же шаблону данных.

Затем я приступил к фактическому добавлению TabItem к ObservableCollection в моем коде и установил свойство TabItem.Content для пользовательского элемента управления. Проблема скорости теперь устранена, так же как и проблема потери состояния, поскольку я прекратил использование шаблонов данных. Однако теперь я застрял с проблемой привязки TabItem.header к Custome ».Заглавие" Свойство моего usercontrol, которое должно отображаться в заголовке вкладки.

Итак, после этого ужасно длинного поста, мои вопросы:

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

1a. Есть ли лучшая альтернатива, чем я упоминал в посте выше?

Есть ли способ сделать все это через Xaml вместо создания внутреннего кода кода элементов Tab?

Ответы на вопрос(1)

Ваш ответ на вопрос