在WPF中持久化ListView列布局的最佳实践

3
目标是让用户隐藏/显示/移动/调整列,保存此布局,并在应用程序重新启动时能够恢复它。 首先我会告诉您我如何做到这一点。对于GridView.Columns,我附加了CollectionChanged事件以及每个Column.With的依赖属性。当任何事件被触发时,我将列的顺序、可见性和宽度保存到专有字符串中,并将其保存到XML设置文件中。 但我觉得这是相当繁琐的工作-是否存在流行的现有组件或实践来保存列布局?

是的,我知道这是一篇旧帖子。但请参阅这篇(同样古老的)文章,以获取一个解决方案。http://www.wpfsharp.com/2012/04/10/saving-the-gridview-column-order-in-wpf/ 基本上,声明辅助类来保存您想要保存的信息,将它们标记为Serializable,使用XmlSerializer将它们打入和打出一个便捷的文件。 - Jesse Chisholm
1个回答

2

您能在XAML中保存列吗?经过快速测试,似乎可以保存相关信息。我从这里开始:

<GridView>
    <GridView.Columns>
        <GridViewColumn Header="First Name" DisplayMemberBinding="{Binding FirstName}"/>
        <GridViewColumn Header="Last Name" DisplayMemberBinding="{Binding LastName}"/>
        <GridViewColumn Header="Age" DisplayMemberBinding="{Binding Age}"/>
    </GridView.Columns>
</GridView>

在调整大小和移动一些列之后,我调用了GridView.Columns上的XamlWriter.Save,结果如下:

<GridViewColumnCollection xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    <GridViewColumn Width="108.51" DisplayMemberBinding="{Binding Path=FirstName}">First Name</GridViewColumn>
    <GridViewColumn DisplayMemberBinding="{Binding Path=Age}">Age</GridViewColumn>
    <GridViewColumn Width="83.8533333333333" DisplayMemberBinding="{Binding Path=LastName}">Last Name</GridViewColumn>
</GridViewColumnCollection>

这是一个很好的答案 - 我唯一的保留意见是,在尝试还原时,它会覆盖您的绑定和标题。 - Sergey Aldoukhov
你是正确的。如果你只想存储一些关键属性,我认为你现有的字符串方法就可以了。将列保存为XAML是一种“核选项”。 - Robert Macnee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接