2012-06-23 3 views
3

У меня есть TabControl, и под ним у меня есть несколько элементов, таких как TreeView и DataGrid. Когда я расширяю дерево и изменяю размер столбцов сетки данных, если я затем перейду на другую вкладку и вернусь, все состояние пользовательского интерфейса будет забыто. Мне нужно повторно развернуть дерево и изменить размер столбцов.Как сохранить состояние интерфейса WPF?

Есть ли разумный и существующий способ сохранить состояние пользовательского интерфейса? Давайте разделим это в -

  1. временно (в памяти) и
  2. постоянный (на диске).

ответ

8

Чтобы сохранить состояние можно связать соответствующий контроль (Width, Height, IsSelected и т.д.) свойства к свойствам вашего источника привязки, это будет автоматически сохранять temprory состояние (т.е. ViewModel в случае MVVM.); для постоянного сохранения вы можете сериализовать ViewModel и сохранить его на диске и, при необходимости, загрузить его.

как для сохранения вашего вида дерева состояния вы можете иметь IsExpanded и IsSelected свойства в объекте (ViewModel), что ваш TreeView связан нравится это -

<Style TargetType="{x:Type TreeViewItem}"> 
    <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> 
    <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
</Style> 

Вы также можете использовать настройки проекта для сохранения состояния ваше приложение, взгляд на этот вопрос SO -

c# - approach for saving user settings in a WPF application?

и этой статье - User Settings Applied

+0

Итак, я бы поместил все свойства, которые хочу сохранить в моей модели просмотра? Я думаю, что моя модель взгляда быстро раздулась. Существует ли общий подход к этому вопросу, т. Е. У меня есть два вида дерева, поэтому я префикс свойств IsExpanded, таких как 'FooTreeViewIsExpanded' и' BarTreeViewIsExpanded'? – Tower

+0

@rFactor - Нет, свойство IsExpanded перейдет к Модели вашего TreeViewItem; посмотрите эту статью для объяснения - [Упрощение WPF TreeView с помощью шаблона ViewModel] (http://www.codeproject.com/Articles/26288/Simplifying-the-WPF-TreeView-by-Using-the-ViewMode) – akjoshi

+0

@rFactor - и в случае, если вы хотите сохранить много состояний ваших элементов управления/окна, вы можете использовать ProjectSettings approch; см. ссылки, предоставленные в ответ. – akjoshi

Смежные вопросы