2009-03-16 6 views
1

Ziel ist es, den Benutzer Spalten zu verbergen/anzeigen/verschieben/skalieren zu lassen, dieses Layout zu speichern und es beim Neustart der App wiederherstellen zu können. Ich werde dir zuerst sagen, wie ich es mache. In GridView.Columns füge ich sowohl an CollectionChanged als auch an jede Column.With-Abhängigkeitseigenschaft an. Wenn eines der Ereignisse ausgelöst wird, speichere ich Reihenfolge, Sichtbarkeit und Breite der Spalten in einer proprietären Zeichenfolge, die ich in einer XML-Einstellungsdatei speichern kann. Aber es scheint mir, dass dies eine ganze Menge von manueller Arbeit ist - gibt es beliebte vorhandene Komponenten oder Praktiken zum Speichern des Spaltenlayouts?Best Practices für das persistente Layout von ListView-Spalten in WPF

+0

Ja, ich weiß, das ist eine alte Post ist. Aber siehe diesen (auch alten) Artikel für eine Lösung. http://www.wpfsharp.com/2012/04/10/saving-the-gridview-column-order-in-wpf/ Erklären Sie Helper-Klassen für die Informationen, die Sie speichern möchten, markieren Sie sie Serializable, verwenden Sie einen XmlSerializer um sie in eine geeignete Datei zu packen. –

Antwort

2

Können Sie die Spalten in XAML speichern? Nach einem kurzen Test schien es die relevanten Informationen zu speichern. Ich begann diese mit:

<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> 

Und nach Ändern der Größe und ein paar bewegen, rief ich XamlWriter.Save auf GridView.Columns und bekam dies:

<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> 
+0

Dies ist eine gute Antwort - meine einzige Reservierung wäre, dass beim Überschreiben die Bindungen und Beschriftungen überschrieben würden. –

+0

Sie haben Recht. Wenn Sie nur einige Schlüsseleigenschaften speichern möchten, ist die vorhandene String-Methode in Ordnung. Speichern der Spalten als XAML ist eine Art nukleare Option. –