Das Problem ist ja allgemein bekannt.. Wenn moderne SmartClient Oberflächen schon die Möglichkeit bieten, alles anzupassen und das UI bis in's letzte Detail zu personalisieren (Farben, Positionen, etc..), dann möchte der Benutzer diesen - vor allem "kreativ-mühsamen" Prozess meistens nicht bei jedem Start der Applikation durchführen: Sprich wir benötigen eine Möglichkeit die angepassten Eigenschaften der einzelnen Controls lokal oder in einer Datenbank zu speichern!
Bei WPF Applikationen würde sich dafür normalerweise bei erster Überlegung Databinding anbieten! Doch denkt man im Detail über das Problem nach, so scheint die Lösung doch nicht so einfach, wie zuerst geglaubt...
Eine mögliche Lösung für das Problem wird in diesem Artikel auf Codeproject vorgestellt:
Der Autor verwendet dafür Attached Properties und MarkupExtensions.
Zusammengefügt, funktioniert die State Persistance folgendermaßen:
<ListView> <ListView.View> <GridView> <GridViewColumn ElementState.Mode="Persist" ElementState.UId="DemoWindow_GridViewColumn1" DisplayMemberBinding="{Binding Path=FirstName}" Header="First Name" Width="{ElementState Default=100}"/> <GridViewColumn ElementState.Mode="Persist" ElementState.UId="DemoWindow_GridViewColumn2" DisplayMemberBinding="{Binding Path=LastName}" Header="Last Name" Width="{ElementState Default=100}" /> <GridViewColumn ElementState.Mode="Persist" ElementState.UId="DemoWindow_GridViewColumn3" DisplayMemberBinding="{Binding Path=Blog}" Header="Blog" Width="{ElementState Default=Auto}" /> </GridView> </ListView.View> </ListView>
Mit Hilfe der Attached Properties ElementState.Mode und UId werden Metadaten für das Control angegeben. Die Eigenschaften die personalisierbar sein sollen, werden über eine eigene MarkupExtension ElementState auf die Datenquelle gebunden.
Alles in alle sicher ein gute Möglichkeit, Userinterface-Einstellungen auf Benutzerebene zu speichern!
[knom]