如何保存 WPF UI 状态?
Posted
技术标签:
【中文标题】如何保存 WPF UI 状态?【英文标题】:How to save WPF UI state? 【发布时间】:2012-06-25 12:20:33 【问题描述】:我有一个TabControl
,在它下面我有几个元素,比如TreeView
和DataGrid
。当我展开树并调整数据网格列的大小时,如果我随后切换到另一个选项卡并返回,则整个 UI 状态都会被遗忘。我必须重新展开树并调整列的大小。
是否有一种明智且现有的方法来保存 UI 状态?让我们把它分成-
-
临时(在内存中)和
永久(在磁盘上)。
【问题讨论】:
【参考方案1】:要保存状态,您可以将相关控件(Width
、Height
、IsSelected
等)属性绑定到绑定源的属性(即 MVVM 的 ViewModel),这将自动保存您的临时状态;为了永久保存,您可以序列化您的 ViewModel 并将其保存在磁盘上,并在需要时加载它。
为了保存你的树视图状态,你可以在你的TreeView
绑定的对象(ViewModel)中拥有IsExpanded
和IsSelected
属性-
<Style TargetType="x:Type TreeViewItem">
<Setter Property="IsExpanded" Value="Binding IsExpanded, Mode=TwoWay" />
<Setter Property="IsSelected" Value="Binding IsSelected, Mode=TwoWay" />
</Style>
您还可以使用项目设置来保存应用程序的状态, 看看这个 SO Question -
c# - approach for saving user settings in a WPF application?
还有这篇文章-User Settings Applied
【讨论】:
那么,我会将我希望保存的所有属性放入我的视图模型中吗?我认为我的视图模型很快就会变得臃肿。是否有一种通用的方法可以在这里采取 - 即我有两个树视图,所以我是否要在IsExpanded
属性前面加上 FooTreeViewIsExpanded
和 BarTreeViewIsExpanded
?
@rFactor - 不,IsExpanded 属性将转到 TreeViewItem 的模型;看这篇文章的解释 - Simplifying the WPF TreeView by Using the ViewModel Pattern
@rFactor - 如果您想保存控件/窗口的大量状态,则可以使用 ProjectSettings 方法;请参阅答案中提供的链接。以上是关于如何保存 WPF UI 状态?的主要内容,如果未能解决你的问题,请参考以下文章