3
我有一个TabControl
,在它下面我有几个元素,如TreeView
和DataGrid
。当我展开树并调整数据网格列的大小时,如果我然后选择另一个选项卡并返回,则整个UI状态将被遗忘。我必须重新展开树并调整列的大小。如何保存WPF UI状态?
有没有一种明智的方法来保存UI状态?让我们划分到这一点 -
- 临时(内存)和
- 永久性的(在磁盘上)。
我有一个TabControl
,在它下面我有几个元素,如TreeView
和DataGrid
。当我展开树并调整数据网格列的大小时,如果我然后选择另一个选项卡并返回,则整个UI状态将被遗忘。我必须重新展开树并调整列的大小。如何保存WPF UI状态?
有没有一种明智的方法来保存UI状态?让我们划分到这一点 -
要保存状态,您可以在相应的控制(Width
,Height
,IsSelected
等)的属性绑定到你的绑定源的属性,这将自动保存您temprory状态(MVVM的情况下,即视图模型。);为了永久保存,您可以序列化您的ViewModel并将其保存在磁盘上,并在需要时明显加载它。
像保存你的树视图状态,您可以在对象(视图模型),你TreeView
势必喜欢这个有IsExpanded
和IsSelected
性能 -
<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
那么,我会把我希望保存到我的视图模型中的所有属性?我认为我的观点模型会很快变得臃肿。是否有一个通用的方法来采取 - 即我有两个树视图,所以我前缀'IsExpanded'属性像'FooTreeViewIsExpanded'和'BarTreeViewIsExpanded'? – Tower
@rFactor - 不,IsExpanded属性将转到TreeViewItem的Model;看看这篇文章的解释 - [通过使用ViewModel模式简化WPF TreeView](http://www.codeproject.com/Articles/26288/Simplifying-the-WPF-TreeView-by-Using-the-ViewMode) – akjoshi
@rFactor - 如果你想保存很多控件/窗口的状态,那么你可以使用ProjectSettings approch;请参阅答案中提供的链接。 – akjoshi