【问题标题】:How to save WPF UI state?如何保存 WPF UI 状态?
【发布时间】:2012-06-25 12:20:33
【问题描述】:

我有一个TabControl,在它下面我有几个元素,比如TreeViewDataGrid。当我展开树并调整数据网格列的大小时,如果我随后切换到另一个选项卡并返回,则整个 UI 状态都会被遗忘。我必须重新展开树并调整列的大小。

是否有一种明智且现有的方法来保存 UI 状态?让我们把它分成-

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

【问题讨论】:

    标签: c# .net wpf settings tabcontrol


    【解决方案1】:

    要保存状态,您可以将相关控件(WidthHeightIsSelected 等)属性绑定到绑定源的属性(即 MVVM 的 ViewModel),这将自动保存您的临时状态;为了永久保存,您可以序列化您的 ViewModel 并将其保存在磁盘上,并在需要时加载它。

    为了保存你的树视图状态,你可以在你的TreeView 绑定的对象(ViewModel)中拥有IsExpandedIsSelected 属性-

    <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 属性前面加上 FooTreeViewIsExpandedBarTreeViewIsExpanded
    • @rFactor - 不,IsExpanded 属性将转到 TreeViewItem 的模型;看这篇文章的解释 - Simplifying the WPF TreeView by Using the ViewModel Pattern
    • @rFactor - 如果您想保存控件/窗口的大量状态,则可以使用 ProjectSettings 方法;请参阅答案中提供的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2015-12-21
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    相关资源
    最近更新 更多