Как сохранить состояние элемента управления в элементах табуляции в TabControl

Я новичок в WPF, пытаюсь создать проект, который следует рекомендациям Джоша Смита.отличная статья с описаниемШаблон проектирования Model-View-ViewModel.

Используя ДжошаОбразец кода в качестве основы, я создал простое приложение, которое содержит ряд "рабочие пространства»каждый из которых представлен вкладкой в TabControl. В моем приложении рабочее пространство - это редактор документов, который позволяет управлять иерархическим документом с помощью элемента управления TreeView.

Хотя мне удалось открыть несколько рабочих областей и просмотреть их содержимое документа в связанном элементе управления TreeView, я обнаружил, что TreeView "забывает» его состояние при переключении между вкладками. Например, если TreeView в Tab1 частично развернут, он будет отображаться как полностью свернутый после переключения на Tab2 и возврата к Tab1. Такое поведение применимо ко всем аспектам состояния элемента управления для всех элементов управления.

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

Я предполагаю, что упускаю что-то простое, но я не уверен, где искать ответ. Любое руководство будет высоко ценится.

Спасибо Тим

Обновить:

В соответствии с просьбой я попытаюсь опубликовать некоторый код, демонстрирующий эту проблему. Однако, поскольку данные, лежащие в основе TreeView, являются сложными, я опубликую упрощенный пример, демонстрирующий те же симптомы. Вот XAML из главного окна:


    
        
            
        
    

    
        
            
        
    

Приведенный выше XAML правильно связывается с ObservableCollection DocumentViewModel, посредством чего каждый член представлен через DocumentView.

Для простоты этого примера я удалил TreeView (упомянутый выше) из DocumentView и заменил его TabControl, содержащим 3 фиксированных вкладки:


    
    
    

В этом случае нет привязки между DocumentView и DocumentViewModel. Когда код выполняется, внутренний TabControl не может запомнить его выбор при переключении внешнего TabControl.

Однако, если я явно связать внутренний TabControl 's SelectedIndex свойство ...


    
    
    

... соответствующему фиктивному свойству в DocumentViewModel ...

public int SelecteDocumentIndex { get; set; }

... внутренняя вкладка может запомнить его выбор.

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

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

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