2012-06-23 387 views
3

我有一个TabControl,在它下面我有几个元素,如TreeViewDataGrid。当我展开树并调整数据网格列的大小时,如果我然后选择另一个选项卡并返回,则整个UI状态将被遗忘。我必须重新展开树并调整列的大小。如何保存WPF UI状态?

有没有一种明智的方法来保存UI状态?让我们划分到这一点 -

  1. 临时(内存)和
  2. 永久性的(在磁盘上)。

回答

8

要保存状态,您可以在相应的控制(WidthHeightIsSelected等)的属性绑定到你的绑定源的属性,这将自动保存您temprory状态(MVVM的情况下,即视图模型。);为了永久保存,您可以序列化您的ViewModel并将其保存在磁盘上,并在需要时明显加载它。

像保存你的树视图状态,您可以在对象(视图模型),你TreeView势必喜欢这个有IsExpandedIsSelected性能 -

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

您还可以使用项目设置保存的状态您的应用程序, 看看这太问题 -

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

和这篇文章 - User Settings Applied

+0

那么,我会把我希望保存到我的视图模型中的所有属性?我认为我的观点模型会很快变得臃肿。是否有一个通用的方法来采取 - 即我有两个树视图,所以我前缀'IsExpanded'属性像'FooTreeViewIsExpanded'和'BarTreeViewIsExpanded'? – Tower

+0

@rFactor - 不,IsExpanded属性将转到TreeViewItem的Model;看看这篇文章的解释 - [通过使用ViewModel模式简化WPF TreeView](http://www.codeproject.com/Articles/26288/Simplifying-the-WPF-TreeView-by-Using-the-ViewMode) – akjoshi

+0

@rFactor - 如果你想保存很多控件/窗口的状态,那么你可以使用ProjectSettings approch;请参阅答案中提供的链接。 – akjoshi