Как сохранить управление, указывают в объектах вкладки в TabControl

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

С помощью кода кода Josh's как основы я создал простое приложение, которое содержит много "рабочих областей", каждый представленный вкладкой в TabControl. В моем приложении рабочая область является редактором документа, который позволяет иерархическому документу управляться через управление TreeView.

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

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

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

Спасибо, Tim

Обновление:

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


    
        
            
        
    

    
        
            
        
    

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

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


    
    
    

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

Однако, если я явно связываю свойство SelectedIndex внутреннего TabControl...


    
    
    

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

public int SelecteDocumentIndex { get; set; }

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

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

38
задан H.B. 21 February 2012 в 18:58
поделиться

1 ответ

Применение применения писателя Framework WPF (WAF) показывает, как решить вашу проблему. Это создает новый Usercontrol для каждого табо. Таким образом, состояние сохраняется, когда пользователь меняет активную вкладку.

1
ответ дан 27 November 2019 в 03:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: