We are using the PersistenceFramework to handle storing the user's settings in our application. Currently the application consists of a single window that contains a RadWizard with three pages. The first page gets the configuration options for the process, the second shows the progress of the operation, and the final page shows the results of the operation in a RadGridView. We have worked around a few issues with the PersistenceFramework storing unwanted specific values (e.g. SelectedPage) by using SerializationOptions with the Except Condition. Of course we used the Custom PropertiesProvider for the RadGridView. This works in general; however, we have run into issues during development where, if you make a change in the XAML, (e.g. change the layout/presentation of the page) minor changes cause the saved properties to be incompatible and the application just crashes. It then takes time to determine whether the problem is with the persistence or something the programmer did.
What we would like to do is go to the Condition="Only" model of persistence. This would allow us to specify the few things like window size and position, configuration settings, and the final RadGridView properties; and persist just those. I have successfully trimmed the main window data down to the window size and position using the Only Condition. However, when trying to work with items deeper in the page. I haven't been able to filter properly. I either get nothing, or everything.
I am looking for help on how persist the option from the first page and the RadGridView properties from the third page without the rest of the properties of either page or anything from the second page.
001.
<
base:Window
x:Class
=
"CatalogCompare.CatalogCompareView"
003.
xmlns:x
=
"http://schemas.microsoft.com/winfx/2006/xaml"
004.
xmlns:base
=
"clr-namespace:SSI.Base.UI;assembly=SSI.Base.UI"
005.
xmlns:telerik
=
"http://schemas.telerik.com/2008/xaml/presentation"
006.
xmlns:telerik1
=
"clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls"
007.
xmlns:persist
=
"clr-namespace:SSI.Base.UI.Persistence;assembly=SSI.Base.UI"
008.
xmlns:radGridContextMenu
=
"clr-namespace:SSI.Base.UI.Controls.RadGridContextMenu;assembly=SSI.Base.UI"
009.
xmlns:sys
=
"clr-namespace:System;assembly=mscorlib"
010.
xmlns:behaviors
=
"clr-namespace:CatalogCompare"
011.
Title
=
"Catalog Compare"
012.
Height
=
"440"
013.
Width
=
"617"
014.
MinHeight
=
"440"
015.
MinWidth
=
"617"
016.
Icon
=
"pack://application:,,,/SSI.Images;component/Images/CatalogCompare.ico"
>
017.
<
telerik:PersistenceManager.SerializationOptions
>
018.
<
telerik:SerializationMetadataCollection
>
019.
<
telerik:PropertyNameMetadata
Condition
=
"Only"
Expression
=
"^\b(Top)\b$"
SearchType
=
"PropertyPath"
/>
020.
<
telerik:PropertyNameMetadata
Condition
=
"Only"
Expression
=
"^\b(Left)\b$"
SearchType
=
"PropertyPath"
/>
021.
<
telerik:PropertyNameMetadata
Condition
=
"Only"
Expression
=
"^\b(Width)\b$"
SearchType
=
"PropertyPath"
/>
022.
<
telerik:PropertyNameMetadata
Condition
=
"Only"
Expression
=
"^\b(Height)\b$"
SearchType
=
"PropertyPath"
/>
023.
</
telerik:SerializationMetadataCollection
>
024.
</
telerik:PersistenceManager.SerializationOptions
>
025.
<
Window.Resources
>
026.
...
027.
</
Window.Resources
>
028.
<
Grid
x:Name
=
"LayoutRoot"
>
029.
<
telerik:RadWizard
x:Name
=
"wizard"
Cancel
=
"wizard_Cancel"
Finish
=
"wizard_Export"
SelectedPageIndex
=
"{Binding SelectedWizardPageIndex, Mode=TwoWay}"
IsContentPreserved
=
"True"
>
030.
<
telerik:PersistenceManager.SerializationOptions
>
031.
<
telerik:SerializationMetadataCollection
>
032.
<
telerik:PropertyNameMetadata
Condition
=
"Except"
Expression
=
"SelectedPage"
SearchType
=
"PropertyName"
/>
033.
</
telerik:SerializationMetadataCollection
>
034.
</
telerik:PersistenceManager.SerializationOptions
>
035.
<
telerik:RadWizard.WizardPages
>
036.
<
telerik:WizardPage
x:Name
=
"configurePage"
IsSideHeaderVisible
=
"True"
ButtonsVisibilityMode
=
"Next,Cancel"
NextButtonContent
=
"Compare"
IsTitleVisible
=
"False"
SideHeaderWidth
=
"120"
HorizontalContentAlignment
=
"Stretch"
VerticalContentAlignment
=
"Stretch"
SideHeaderTemplate
=
"{StaticResource sideHeaderTemplate}"
HeaderTemplate
=
"{StaticResource headerTemplate}"
Template
=
"{StaticResource WizardPageTemplate }"
behaviors:CatalogComparePageBehavior.IsEnabled
=
"True"
>
037.
<
Grid
Margin
=
"5"
>
038.
<
Grid.RowDefinitions
>
039.
<
RowDefinition
Height
=
"Auto"
/>
040.
<
RowDefinition
Height
=
"Auto"
/>
041.
</
Grid.RowDefinitions
>
042.
<
StackPanel
>
043.
<
TextBlock
Grid.Column
=
"0"
Text
=
"Catalog Compare Options"
FontSize
=
"14"
FontWeight
=
"Bold"
/>
044.
<
TextBlock
Margin
=
"10,10,0,0"
Grid.Column
=
"0"
Text
=
"Compare Type (Missing)"
FontSize
=
"12"
FontWeight
=
"DemiBold"
/>
045.
<
RadioButton
Margin
=
"10,5,0,0"
GroupName
=
"CompareType"
Content
=
"ID Only"
IsChecked
=
"{Binding GuidOnlyCompareType}"
ToolTip
=
"Find catalog items by ID (GUID) only; catalog items with the same name but different IDs will show as missing"
/>
046.
<
RadioButton
Margin
=
"10,5,0,0"
GroupName
=
"CompareType"
Content
=
"WorkShare Transfer/Project/Design"
IsChecked
=
"{Binding WorkShareCompareType}"
ToolTip
=
"Find catalog items with WorkShare matching if an ID (GUID) match is not found"
/>
047.
</
StackPanel
>
048.
</
Grid
>
049.
</
telerik:WizardPage
>
050.
<
telerik:WizardPage
x:Name
=
"progressPage"
IsSideHeaderVisible
=
"True"
ButtonsVisibilityMode
=
"Cancel"
AllowNext
=
"False"
IsTitleVisible
=
"False"
SideHeaderWidth
=
"120"
SideHeaderTemplate
=
"{StaticResource sideHeaderTemplate}"
HeaderTemplate
=
"{StaticResource headerTemplate}"
Template
=
"{StaticResource WizardPageTemplate}"
behaviors:CatalogComparePageBehavior.IsEnabled
=
"True"
>
051.
<
Grid
>
052.
<
Grid.ColumnDefinitions
>
053.
<
ColumnDefinition
Width
=
"61"
/>
054.
<
ColumnDefinition
Width
=
"350"
/>
055.
</
Grid.ColumnDefinitions
>
056.
<
StackPanel
Margin
=
"0,20,0,0"
Grid.Column
=
"1"
>
057.
<
telerik:PersistenceManager.SerializationOptions
>
058.
<
telerik:SerializationMetadataCollection
>
059.
<
telerik:PropertyNameMetadata
Condition
=
"Except"
Expression
=
"Children"
SearchType
=
"PropertyName"
/>
060.
</
telerik:SerializationMetadataCollection
>
061.
</
telerik:PersistenceManager.SerializationOptions
>
062.
<
TextBlock
HorizontalAlignment
=
"Left"
TextWrapping
=
"Wrap"
Text
=
"Comparing Project Catalogs..."
/>
063.
<
telerik:RadProgressBar
Value
=
"{Binding ProgressPercentage}"
Width
=
"350"
Minimum
=
"0"
Maximum
=
"100"
HorizontalAlignment
=
"Left"
VerticalAlignment
=
"Center"
Height
=
"20"
BorderThickness
=
"2"
BorderBrush
=
"{StaticResource SSIGreyDark.Brush}"
Foreground
=
"{StaticResource SSIBlueDark.Brush}"
/>
064.
<
TextBlock
Text
=
"{Binding ProgressText}"
VerticalAlignment
=
"Center"
HorizontalAlignment
=
"Center"
/>
065.
</
StackPanel
>
066.
</
Grid
>
067.
</
telerik:WizardPage
>
068.
<
telerik:CompletionWizardPage
x:Name
=
"resultsPage"
IsSideHeaderVisible
=
"True"
ButtonsVisibilityMode
=
"Finish,Cancel"
IsTitleVisible
=
"False"
AllowFinish
=
"{Binding ShowResultsGrid}"
FinishButtonContent
=
"Export"
CancelButtonContent
=
"Close"
SideHeaderWidth
=
"120"
SideHeaderTemplate
=
"{StaticResource sideHeaderTemplate}"
HeaderTemplate
=
"{StaticResource headerTemplate}"
Template
=
"{StaticResource WizardPageTemplate}"
behaviors:CatalogComparePageBehavior.IsEnabled
=
"True"
>
069.
<
telerik:PersistenceManager.SerializationOptions
>
070.
<
telerik:SerializationMetadataCollection
>
071.
<
telerik:PropertyNameMetadata
Condition
=
"Except"
Expression
=
"AllowFinish"
SearchType
=
"PropertyName"
/>
072.
</
telerik:SerializationMetadataCollection
>
073.
</
telerik:PersistenceManager.SerializationOptions
>
074.
<
Grid
>
075.
<
TextBlock
Text
=
"No catalog differences detected"
FontSize
=
"16"
FontWeight
=
"DemiBold"
Margin
=
"10,20,0,0"
HorizontalAlignment
=
"Left"
Visibility
=
"{Binding ShowNoCatalogChanges, Converter={StaticResource BooleanToVisibilityConverter}}"
>
076.
<
telerik:PersistenceManager.SerializationOptions
>
077.
<
telerik:SerializationMetadataCollection
>
078.
<
telerik:PropertyNameMetadata
Condition
=
"Except"
Expression
=
"Visibility"
SearchType
=
"PropertyName"
/>
079.
</
telerik:SerializationMetadataCollection
>
080.
</
telerik:PersistenceManager.SerializationOptions
>
081.
</
TextBlock
>
082.
<
base:BaseRadGridView
Name
=
"_grid"
083.
GroupRenderMode
=
"Flat"
084.
AutoGenerateColumns
=
"False"
085.
ItemsSource
=
"{Binding CatalogEntryList}"
086.
Grouping
=
"GridGrouping"
087.
AutoExpandGroups
=
"False"
088.
persist:Persist.PersistColumnGroups
=
"True"
089.
persist:Persist.PersistColumnSorting
=
"True"
090.
ShowGroupPanel
=
"True"
091.
Margin
=
"-3,-3,-3,-3"
092.
AlternateRowBackground
=
"#FFF4F4F4"
093.
AlternationCount
=
"2"
094.
Visibility
=
"{Binding ShowResultsGrid, Converter={StaticResource BooleanToVisibilityConverter}}"
>
095.
<
telerik:RadContextMenu.ContextMenu
>
096.
<
radGridContextMenu:RadGridContextMenu
x:Name
=
"_contextMenu"
ExportOptionIsVisible
=
"False"
/>
097.
</
telerik:RadContextMenu.ContextMenu
>
098.
<
telerik:RadGridView.Columns
>
099.
<
telerik:GridViewDataColumn
DataMemberBinding
=
"{Binding DatasetCategory}"
100.
Header
=
"Category"
101.
ShowColumnWhenGrouped
=
"True"
102.
DisplayIndex
=
"0"
103.
ShowToolTipOnTrimmedText
=
"True"
104.
UniqueName
=
"Category"
105.
Width
=
"100"
/>
106.
...
107.
</
telerik:RadGridView.Columns
>
108.
</
base:BaseRadGridView
>
109.
</
Grid
>
110.
</
telerik:CompletionWizardPage
>
111.
</
telerik:RadWizard.WizardPages
>
112.
</
telerik:RadWizard
>
113.
</
Grid
>
114.
</
base:Window
>